动态加载dll,dll里面定义的数据类型怎么调用啊

salsa2010 2015-10-11 07:57:01
动态加载dll不需要包含.h文件,那里面定义的数据类型怎么调用啊
...全文
239 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2015-10-13
  • 打赏
  • 举报
回复
loadlibrary啊,现在只会用这种方法了。
Saleayas 2015-10-12
  • 打赏
  • 举报
回复
是否是动态加载,在于你是否引用了 .lib 导入库。
和 是否使用了 .h 文件没有任何关系的。
你使用了动态加载依然可以使用 .h 文件的。
如果 头文件中的符号定义使用了 dllimport 的话,那么使用 宏定义去除。然后,和普通的静态加载一致,此时链接的时候,会提示你,函数没有定义,此时需要使用动态导入的方式,导入那些导出符号,并自己定义这些你使用的函数和变量等等。
  • 打赏
  • 举报
回复
自己重新声明一遍
信阳毛尖 2015-10-12
  • 打赏
  • 举报
回复
怎么能这么搞啊!

首先是那个dll,既然你不需要头文件,即动态库的动态加载方式调用,里面定义的数据结构理论上只作为dll内部使用!在这种情况下,如果这个dll的导出函数参数有内部定义的数据类型,显然是违反低耦合性原则的,实际上这种情况下编写dll方应该提供.h、.lib和.dll文件给使用者的,即你不能以动态库的动态加载方式调用,而是以动态库的静态加载方式调用!
换句话说,一般的只提供dll和导出函数文档这种情况,其dll中的导出函数参数列表都应该是基础数据类型,而不应带有内部的自定义结构,当然,带内部定义数据机构参数的函数,也应该是内部函数,不做导出用。

其次,就是你使用方了,要想使用dll里定义的数据结构,必须要有头文件的,或者你自己定义一个同名的数据结构,但是这种情况下你知道那个数据结构的组成吗?

总之,对于dll的编写者和使用者,双方必须要有明确的需求,以何种方式使用,决定着dll的编写规则,也决定着使用规则.....
paschen 2015-10-12
  • 打赏
  • 举报
回复
参看:http://blog.csdn.net/todototry/article/details/1640150

链接只是其中的(一),后面还有,把这系列看完了帮助会很大
Eleven 2015-10-12
  • 打赏
  • 举报
回复
#include 相关的头文件
oyljerry 2015-10-12
  • 打赏
  • 举报
回复
如果是公用的,那么就应该把定义放到公共的h文件中,这样DLL和调用的工程都可以使用
encoderlee 版主 2015-10-12
  • 打赏
  • 举报
回复
没有.h头文件的话,需要你自己手动声明一遍,比如Dll有个导出函数要求使用一个名为Student的结构体,
通常情况下,DLL的开发者会提供.h和.lib文件,.h文件中就有Student结构体的声明,直接包含进来就能使用,
如果没有给你.h文件,则你要自己声明,并且你自己声明的要和DLL中定义的完全一致。
总之一个C/C++的DLL想要拿给别人使用,就要提供.h和.lib文件,没有的话至少也要提供一份文档说明一下参数的类型。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧