VC2005加载dll的问题,大侠留步!

Golden_Shadow 2011-08-07 09:50:31
刚接触DLL,按照书上所讲,创建了一个DLL项目,成功生成了DLL文件。接下来在当前解决方案下新建了一个项目,用来测试这个DLL。在测试项目中编写好了代码,之后在连接的时候无法解析外部符号,于是在测试项目中设置了项目依赖项,使得测试项目依赖于DLL项目,在连接的时候说没有找到DLL,正在执行完全连接,之后在下一行说正在创建库…之后就成功了。按下f5出现 调试用于会话的可执行文件 的对话框,我没有使用这个对话框的功能,而是去找了测试项目生成的可执行文件,运行之后发现实现了在测试项目文件中对DLL的调用。
这不是正路,我想得知正规加载DLL的方法。请大侠赐教!
手机发帖,等有机会去网吧了再结帖。
...全文
148 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶之舟 2011-08-08
  • 打赏
  • 举报
回复
在连接的时候说没有找到DLL,要将你的测试程序(EXE)和DLL编译到同一个目录下去
东莞某某某 2011-08-07
  • 打赏
  • 举报
回复
楼主看看书,先分清楚 隐式链接 和 显示连接 ,再去了解extern "c" 调用约定 __declspec 这些细节。

推荐 windows核心编程
wjjjuniniho 2011-08-07
  • 打赏
  • 举报
回复
用LoadLibrary("xx.dll")函数或者在程序前加一句#pragma comment(lib,"xx.lib")就可以了
hongwenjun 2011-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tujiaw 的回复:]

dll的编写与调用
[/Quote]
++

extern "C"

在 DLL的设计中中,,如果使用C++开发,通常在导出函数的定义中使用extern "C",为什么呢?因为当用户使用"运行时动态链接"的时候将使用GetProcAddress函数得到导出函数的地址,该函数是通过导出函数的函数名定位导出函数的,而C++编译器因为函数重载的原因会对开发者定义的函数名进行修饰,导致导出表中的函数名通常不是开发者使用的函数名,比如函数 ExportedFn可能被修饰成??ExportedFn@QAEX 。所以使用extern "C"通知编译器按照C的格式进行编译,而不是使用C++的方法进行编译。使用VS提供的一个工具Dependency Walker可以查看DLL的导出函数。
ningto.com 2011-08-07
  • 打赏
  • 举报
回复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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