VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 889|回复: 7

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

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-11 14:30:01 | 显示全部楼层 |阅读模式
现在用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比较痛苦)
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-26 21:45:01 | 显示全部楼层
格式不一样呗。
MS的lib文件和MinGW的a文件格式不一样。
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-7-29 23:45:01 | 显示全部楼层
DLL
DEV-cpp的.a在vc++中对应的是.lib,它们是不一样的文件格式,

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

调用函数的机制不一样.
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-7-30 00:00:01 | 显示全部楼层
C++的东西,一般所谓的跨平台,是指程序代码可以在多种平台下编译.
楼主可以把Dev-cpp的DLL程序放到VC中重新编译,生成.lib文件进行链接调用就OK啦.
回复

使用道具 举报

0

主题

23

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-7-30 17:00:01 | 显示全部楼层
有没有办法从.a生成.lib的办法?
回复

使用道具 举报

0

主题

23

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-7-30 18:30:01 | 显示全部楼层
在日文网站找到了答案,稍后翻译

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

もし testdll.lib を持っているのであれば、MSVC で実行ファイルを作るのは取るに足らない作業です。
cl testmain.c testdll.lib
回复

使用道具 举报

0

主题

23

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-7-30 19:00:01 | 显示全部楼层
大体意思是可以利用你在用mingw编译时生成的.def文件,通过vc自带的LIB命令,生成.lib
假设伴随.dll生成的def是testdll.def,那么通过如下命令行
lib /machine:i386 /def:testdll.def

就可以生成testdll.lib,那么以后就可以直接在vc中静态连接这个动态库了
cl testmain.c testdll.lib
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-7-31 03:15:01 | 显示全部楼层
楼上的,为什么非要找日文的?
从dll导出.lib文件这方面英文和中文的资料也很多滴:搜索"dll to lib"

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


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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表