Re: [問題] 自製DLL的struct問題
剛好我也什麼都不懂,討論一下。
※ 引述《petercoin (彼得幣)》之銘言:
< 恕刪 >
: 在IO.h內定義一個struct如下
: typedef struct _ReadData
: {
: char *A;
: int B;
: ...
: } READDATA;
< 恕刪 >
: 我目前想到的方法是重新在MyDll.h內定義一個名字不一樣但是內容一樣的struct
: 例如
: typedef struct _ReadData1
: {
: char *A;
: int B;
: ...
: } READDATA1;
先提關鍵字 : dllexport , dllimport , 重點就這兩個 。
用同一份程式碼,配合 macro define 切換,以下贅述憑印象,請自行抓重點,
若有誤也請不吝指正。
--------------------------------------
我不知道你用的 IDE / compiler 是哪套 , 只好以我比較熟的 visual studio 來講 ,
VS 到後面是以 solution 概念為主軸 , 一個 solution 可以有多個 project ,
正常而言我的主程式 (exe) 會是其中一個 project , 命為 MainProj ,
其他可能有數個產生 dll 的 project , 這些講其中一個 , 命為 IOProj。
在 IOProj 裡就是你放的 MyDll.h/.cpp , IO1.h/.cpp IO2.h/.cpp
正常共用 (其他 proj 也用得到) 的 struct/class 宣告,
應是抽出來集中放到一個 .h 裡面,然後宣告時動了點手腳 ,
以下是範例
// ---------- myio.h ----------
#pragma once
#ifndef EXPORT_IO_API
#define IO_API __declspec ( dllimport )
#else
#define IO_API __declspec ( dllexport )
#endif
struct IO_API IOData {
unsigned int m_addr;
unsigned char m_val;
};
int IO_API set_data(IOData * pdata) ; // implement in myio.cpp
// ---------- myio.cpp ----------
// #include "stdafx.h" // for vs
#include "myio.h"
int IO_API set_data( IOData * pdata )
{
if(pdata == NULL) return 0;
pdata->m_addr = 0x80000000;
pdata->m_val = 0xCC;
return 1;
}
先分析一下 .h 講的東西,
若不定義 EXPORT_IO_API , 便可將 IODATA 與其他 function import (Main Project);
若定義出 EXPORT_IO_API , 便可將 IODATA 與其他 function export (IO Project);
這時候就借用了 VS IDE 的巨集定義功能,
在 IO Project 之專案屬性->組態屬性->c/c++->前置處理,前置處理定義新增一個
EXPORT_IO_API 即可,這個 header 對 IO Project 而言就是做 dll export ;
若你習慣用 command line 編譯或是 IDE 不支援前置處理設定的話,
大概就是從 compiler command line 那裡做前置處理了,詳細略(還不是因為懶得查XD)。
而在 Main Project ,只需要 include 到 myio.h 即可 ,
而且確保 EXPORT_IO_API 是沒被定義過的就行了 (正常應該是不會,除非衝名)
include 方式有很多種,像是 #include "..\\IO\\myio.h" ,
或是直接在 IDE 裡面做額外的 include 目錄都行。
這種方式的好處是,最後的確只需要維護一份 .h / .cpp 便可,
不會因為 Project 不同,導致 myio.h , myio.cpp 到處亂飛,
多了兩個問題變成是專案相依性 與常看到 "無法解析的外部符號 @XY ..... " 等等,
不過這兩個問題應該是你原本架構都有機會遇到的。
以上,若我敘述有誤,請不吝指定。
或有其他較佳之維護方式,也歡迎提出討論。
--
「自從我學了 C# , 人都變聰明 , 考試都考一百分」
「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」
「自從我學了 Java , 明顯變壯 , 個子也變高了 」
「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」
< Kuso 星爺語錄 >
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.169.158
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435165717.A.A92.html
→
06/25 09:13, , 1F
06/25 09:13, 1F
→
06/25 09:14, , 2F
06/25 09:14, 2F
→
06/25 11:24, , 3F
06/25 11:24, 3F
→
06/25 11:25, , 4F
06/25 11:25, 4F
→
06/25 11:25, , 5F
06/25 11:25, 5F
→
06/25 11:50, , 6F
06/25 11:50, 6F
→
06/25 11:50, , 7F
06/25 11:50, 7F
→
06/25 12:07, , 8F
06/25 12:07, 8F
→
06/25 12:08, , 9F
06/25 12:08, 9F
→
06/25 12:08, , 10F
06/25 12:08, 10F
→
06/25 12:08, , 11F
06/25 12:08, 11F
→
06/25 12:09, , 12F
06/25 12:09, 12F
→
06/25 12:23, , 13F
06/25 12:23, 13F
→
06/25 12:23, , 14F
06/25 12:23, 14F
→
06/25 12:24, , 15F
06/25 12:24, 15F
→
06/25 12:25, , 16F
06/25 12:25, 16F
→
06/25 12:26, , 17F
06/25 12:26, 17F
→
06/25 12:27, , 18F
06/25 12:27, 18F
→
06/25 12:27, , 19F
06/25 12:27, 19F
→
06/25 12:27, , 20F
06/25 12:27, 20F
→
06/25 12:28, , 21F
06/25 12:28, 21F
→
06/25 12:30, , 22F
06/25 12:30, 22F
→
06/25 12:30, , 23F
06/25 12:30, 23F
→
06/25 12:30, , 24F
06/25 12:30, 24F
→
06/25 12:31, , 25F
06/25 12:31, 25F
→
06/25 12:31, , 26F
06/25 12:31, 26F
→
06/25 12:31, , 27F
06/25 12:31, 27F
→
06/25 12:32, , 28F
06/25 12:32, 28F
→
06/25 12:32, , 29F
06/25 12:32, 29F
→
06/25 12:32, , 30F
06/25 12:32, 30F
→
06/25 12:33, , 31F
06/25 12:33, 31F
→
06/25 12:33, , 32F
06/25 12:33, 32F
→
06/25 12:37, , 33F
06/25 12:37, 33F
→
06/25 12:37, , 34F
06/25 12:37, 34F
→
06/25 12:41, , 35F
06/25 12:41, 35F
→
06/25 12:42, , 36F
06/25 12:42, 36F
→
06/25 12:43, , 37F
06/25 12:43, 37F
→
06/25 12:58, , 38F
06/25 12:58, 38F
→
06/25 15:08, , 39F
06/25 15:08, 39F
→
06/25 15:15, , 40F
06/25 15:15, 40F
→
06/25 15:15, , 41F
06/25 15:15, 41F
→
06/25 15:40, , 42F
06/25 15:40, 42F
→
06/25 15:41, , 43F
06/25 15:41, 43F
→
06/25 15:41, , 44F
06/25 15:41, 44F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章