看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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