Re: [问题] 自制DLL的struct问题

楼主: EdisonX (卡卡兽)   2015-06-25 01:08:24
刚好我也什么都不懂,讨论一下。
※ 引述《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 切换,以下赘述凭印象,请自行抓重点,
若有误也请不吝指正。
作者: petercoin (彼得币)   2015-06-25 09:13:00
意思是说只要有dllexport的struct 就算不放在IO.h而只放在MyDll.h 一样可以直接在IO.cpp里面使用是吗?我目前是用VC 但是exe跟dll是不同solutionMyDll.cpp只提供Set或Get的接口 功能的实作在IO.cpp所以才会有struct要共用的问题QQ
作者: uranusjr (←這人是超級笨蛋)   2015-06-25 11:50:00
这是正解, 然后楼上你需要的应该是宣告在 IO.h, 然后在MyDLL.h 加上 #include "IO.h"
作者: Feis (永远睡不着 @@)   2015-06-25 12:07:00
其实重点就是在于 MyDLL.h 要不要 include 其他人的问题跟这篇的重点其实不太一样. (我是说原 po 的疑问)要 include 的话, 就不会有原 po 的问题.接着才是 dllimport 跟 dllexport 的问题还是说其实是我理解有问题 Orz..
作者: petercoin (彼得币)   2015-06-25 12:23:00
其实我的问题是如果写在IO.h 那使用dll的人如何知道这个struct的内容有什么?因为我只打算把MyDll.h丢给使用者 不打算公开IO.h
作者: Feis (永远睡不着 @@)   2015-06-25 12:25:00
我理解阿. 你要 include 其他人就是要把其他人拿进来你不想的话要怎么办. 这才是你的问题.我的意见就是要嘛把 A.h 给别人. 要嘛就包起来
作者: petercoin (彼得币)   2015-06-25 12:27:00
还是干脆把STRUCT写成注解放在MyDll.h...XD
作者: Feis (永远睡不着 @@)   2015-06-25 12:27:00
如果你连 A.h 都不想给别人. 那要说明一下理由写成注解有什么意义吗 ?
作者: petercoin (彼得币)   2015-06-25 12:30:00
因为我只想让使用者知道有什么function可以用 但是我不想让他知道其他在实作上的任何相关内容 所以才不想放额外的档案出去QQ
作者: Feis (永远睡不着 @@)   2015-06-25 12:31:00
A.h 不是只有共用的 struct 吗 ?还是你连 struct 内部有什么成员都不想让别人知道 ?
作者: petercoin (彼得币)   2015-06-25 12:31:00
阿不好意思 我把A.h跟IO.h搞混了 照你的意思就是把共用的struct放A.h里面 最后把A.h跟MyDll.h都丢给使用
作者: Feis (永远睡不着 @@)   2015-06-25 12:32:00
我以为之前那篇就是这意思 XD
作者: petercoin (彼得币)   2015-06-25 12:32:00
者 然后MyDll.h里面include A.h这样对吧?上一篇你回的我有看懂啦 只是刚刚一时之间没切换过来
作者: Feis (永远睡不着 @@)   2015-06-25 12:33:00
然后你还需要看一下这篇了解一下 dllimport 跟 dllexport
作者: petercoin (彼得币)   2015-06-25 12:37:00
了解 不过IO_API加在struct上的用意其实我不是很了解QQ
作者: Feis (永远睡不着 @@)   2015-06-25 12:37:00
那你先研究一下 DLL 是怎么运作的.
作者: petercoin (彼得币)   2015-06-25 12:41:00
了解 目前也只是写出可以用的 但是运作还不是很熟悉整个是被公司赶鸭子上架要做出成品Orz
作者: Feis (永远睡不着 @@)   2015-06-25 12:43:00
不要被煮熟就好~
作者: petercoin (彼得币)   2015-06-25 12:58:00
会继续努力研究 有问题再来劳烦大家了!!
楼主: EdisonX (卡卡兽)   2015-06-25 15:08:00
额 原来我又跑题了 orz
作者: petercoin (彼得币)   2015-06-25 15:15:00
E大 不会啦 你刚好提到一个我没有注意过的 我会研究研究看这中间的差别是什么
作者: uranusjr (←這人是超級笨蛋)   2015-06-25 15:40:00
其实还有一个方法是用 opaque pointer,DLL 只提供一个READDATA * 宣告, 然后提供 function 读写所有字段内容这样 DLL 使用者就根本不需要知道 struct 内容了

Links booklink

Contact Us: admin [ a t ] ucptt.com