作者petercoin (彼得幣)
看板C_and_CPP
標題[問題] 自製DLL的struct問題
時間Wed Jun 24 18:22:33 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
WinAPI
問題(Question):
目前在設計一套包含不同IO操作功能的API
所以除了MyDll.h, MyDll.cpp之外還有IO.cpp, IO.h, IO2.cpp, IO2.h...
有些資料我希望使用struct包裝之後在IO與MyDll中傳送
並且Call MyDll的人也可以直接使用這個struct
例如
在IO.h內定義一個struct如下
typedef struct _ReadData
{
char *A;
int B;
...
} READDATA;
在IO.cpp內使用這個struct毫無疑問是沒有問題的
在MyDll.cpp內有一個function如下
void funA(READDATA *ReadData)
{
...
}
MyDll.cpp內要使用的話因為有#include "IO.h"所以也沒有問題
但是在MyDll.h內該怎麼做才能讓呼叫這個dll的其他人可以使用READDATA這個struct呢?
我目前想到的方法是重新在MyDll.h內定義一個名字不一樣但是內容一樣的struct
例如
typedef struct _ReadData1
{
char *A;
int B;
...
} READDATA1;
雖然有達到我要的目的
不過總覺得應該會有更好的寫法
只是一直不知道該怎麼下手
查資料也不曉得該用什麼關鍵字查
所以上來請教各位有沒有其他的想法?
先在這邊謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.196.154.130
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435141355.A.77C.html
→ Feis: 基本原則,會共用的獨立出來,加 include guard 06/24 19:22
→ Feis: 然後想清楚之間相依性 06/24 19:25
→ Feis: 決定誰要 include 誰 06/24 19:27
意思是說
把共用的struct放到另一個叫做A.h的header file裡面
然後加上#ifndef來避免重複include
最後讓MyDll.h跟IO.h都include A.h這樣嗎?
如果是的話
最後我要提供給使用者的除了MyDll.dll跟MyDll.h之外
還要提供這個A.h囉?
→ Feis: 或者將 A.h 內容放到兩個 .h 裡面, 一樣加上 guard 06/24 22:43
→ firose: 用戶跟你的 dll 引用的結構定義版本當然要相同,否則當不 06/24 22:46
→ firose: 同步的時候會出問題。而只維護一個版本,比較不會出問題。 06/24 22:46
我目前是比較傾向於維護一個就好
所以說我應該在IO.h跟MyDll.h裡面都這樣寫嗎?
#ifndef _XXXSTRUCT_
#define _XXXSTRUCT_
typedef struct _ReadData
{
char *A;
int B;
...
} READDATA;
#endif
不好意思對這個東西掌握度比較低
可能會問一些笨問題
還謝謝大家海涵
※ 編輯: petercoin (111.251.160.111), 06/24/2015 23:36:59