MinGW 编译的DLL在VC中使用的问题,达人帮忙!!!

luckysym 2007-01-04 04:55:02
现在用DEV-C++写了一dll, 生成了一个.a的静态库文件和一个.dll的动态库,再用DEV-C++写一个控制台程序,通过链接上面的.a文件来调用dll的函数,ok, 通过。

后来在VC2003里面,同样的控制台程序,同样通过链接.a文件,调用那个.dll,编译生成通过,没问题,却在执行的时候在调用DLL中函数的时候报访问冲突。

VC2003中,不链接那个.a文件,使用LoadLibrary和GetProcAddress来加载.dll中的函数,并执行,OK,通过。

为什么VC2003中链接.a文件执行的时候会出错?难道.a文件和VC的编写dll是生成.lib文件格式不一样?那为什么VC编译链接.a文件时没问题?怎么才能使Dev-C++编写的DLL能通过链接.a文件调用DLL?(要调用的函数全部要使用GetProcAddress比较痛苦)
...全文
1447 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_77 2007-01-09
  • 打赏
  • 举报
回复
楼上的,为什么非要找日文的?
从dll导出.lib文件这方面英文和中文的资料也很多滴:搜索"dll to lib"

为无LIB的DLL制作LIB函数符号输入库:
http://www.vckbase.com/document/viewdoc/?id=613


-----------------
.lib有两种,一种是静态的,其中包括函数的实际代码,一种是由DLL生成的.lib,其中并不包含代码,只是包含DLL的链接信息。

whoho 2007-01-09
  • 打赏
  • 举报
回复
大体意思是可以利用你在用mingw编译时生成的.def文件,通过vc自带的LIB命令,生成.lib
假设伴随.dll生成的def是testdll.def,那么通过如下命令行
lib /machine:i386 /def:testdll.def

就可以生成testdll.lib,那么以后就可以直接在vc中静态连接这个动态库了
cl testmain.c testdll.lib
whoho 2007-01-09
  • 打赏
  • 举报
回复
在日文网站找到了答案,稍后翻译

MSVC からは MinGW ライブラリを呼び出すことは出来ませんが、 既に DEF ファイルが手元にあるのですから、Microsoft の LIB ツールを利用して簡単に DLL を生成出来ます。
lib /machine:i386 /def:testdll.def

もし testdll.lib を持っているのであれば、MSVC で実行ファイルを作るのは取るに足らない作業です。
cl testmain.c testdll.lib
whoho 2007-01-09
  • 打赏
  • 举报
回复
有没有办法从.a生成.lib的办法?
roger_77 2007-01-08
  • 打赏
  • 举报
回复
C++的东西,一般所谓的跨平台,是指程序代码可以在多种平台下编译.
楼主可以把Dev-cpp的DLL程序放到VC中重新编译,生成.lib文件进行链接调用就OK啦.
roger_77 2007-01-08
  • 打赏
  • 举报
回复
DLL
DEV-cpp的.a在vc++中对应的是.lib,它们是不一样的文件格式,

使用LoadLibrary和GetProcAddress来加载.dll中的函数,这是使用了动态链接方式调用函数的方式,
而使用.lib或.a是使用静态链接的方式.

调用函数的机制不一样.
FigoZhu 2007-01-08
  • 打赏
  • 举报
回复
格式不一样呗。
MS的lib文件和MinGW的a文件格式不一样。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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