社区
进程/线程/DLL
帖子详情
求救:静态和动态库中 很奇怪的问题
evelan
2004-10-18 02:49:32
利用第三方的静态库,在VC中,用普通EXE程序调用编译,能正常工作,由于界面部分很多是Delphi开发的,故用VC把第三方静态库重新封装为动态库(DLL/OCX方式),好多函数都不能正常工作,请教各位,是什么原因造成的???
...全文
98
10
打赏
收藏
求救:静态和动态库中 很奇怪的问题
利用第三方的静态库,在VC中,用普通EXE程序调用编译,能正常工作,由于界面部分很多是Delphi开发的,故用VC把第三方静态库重新封装为动态库(DLL/OCX方式),好多函数都不能正常工作,请教各位,是什么原因造成的???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
icelight
2004-10-19
打赏
举报
回复
如果是返回值不是期望值, 而不是函数出错, 那么问题可能和模块加载有关, 比如, 若你的静态库的函数执行这一句GetModuleFileName(), 若为动态库调用, 其结果就不一样.
Mr-Chen
2004-10-19
打赏
举报
回复
调用约定不一样,还有数据类型可能不同,注意Delphi和VC之间的数据转换,还有就是看看你的Def文件对不对,给你以下的参考:
Delphi中的声名格式:
Function ShowDialog( hMainWnd:THandle; Msg:PChar ):integer; stdcall;
输出到Dll文件中时,名称不分裂。
VC中的调用格式:
extern "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Msg );
.如带有__stdcall,则要求Lib文件中对应函数名称分裂,可有以下步骤生成Lib文件:
.用Impdef.exe生成def文件,格式为:Impdef def文件名 dll文件名
.手工调制def文件参数,如ShowDialog改为ShowDialog@8
.用Lib.exe生成lib文件,格式为:Lib /def:def文件名
.如声名中无__stdcall,默认调用格式仍为stdcall,但不要求名称分裂,用以下批处理文件MkLib.bat可生成Lib文件:
@echo off
if %1.==. goto error
impdef %1.def %1.dll
lib /def:%1.def
goto end
:error
echo Usage: MkLib DllName
echo Note: Don't add extension ".dll" to parameter "DllName"
:end
同时,如果别人的dll导出函数使用extern "C" __declspec(dllimport)而非_stdcall方式,那么你在VC中调用Delphi或者在Delphi中调用VC的dll几乎可以肯定的说不能成功,这时候你如果已知函数的原型,你需要使用与原来编写dll一样的语言自己再封装一层dll,把所有的接口都修改为_stdcall的方式,再来调用这个新的dll。
evelan
2004-10-18
打赏
举报
回复
我封装了3种方式都不行: 1) win32 Dll
2) mfc ActiveX
3) dcom 进程内服务
以上封装都是都是一样的错误!
如果不行,请问Delphi能调用VC的静态库么?
evelan
2004-10-18
打赏
举报
回复
我所说的函数出错,是指函数执行返回错误值,本来应该返回TRUE,但是封装以后调用返回了FALSE,只是函数不能正常工作,并不是函数调用就出错.
十分郁闷的问题
kugou123
2004-10-18
打赏
举报
回复
可能还是调用约定的问题。
evelan
2004-10-18
打赏
举报
回复
我想可能是我把问题没有描述清楚,第三方静态库(只能在VC中调用),在VC中可以调用编译,可以正常工作,然后把库封装成为Dll or OCX (以便于其他开发工具调用) 封装以后,就连VC调用封装后的动态库s时,静态库的好多函数都出错
oyljerry
2004-10-18
打赏
举报
回复
在vc和Delphi之间调用dll需要注意函数调用约定(多数是数据类型等在不同语言之间的差别),这个比较容易出错
evelan
2004-10-18
打赏
举报
回复
参数类型是一致的,所谓约定不一致应该和静态库无关吧,约定只和动态库中函数接口及声明有关系
快乐鹦鹉
2004-10-18
打赏
举报
回复
参数类型不一致,约定不一致等等
DentistryDoctor
2004-10-18
打赏
举报
回复
估计是调用约定或者是字符串的处理的问题。
教你如何查找入侵者
一天正在发呆,QQ上的一个朋友向我
求救
:“我的网站被黑了,首页给换了,SOS!”。最近正好无事,索性就帮帮他吧。 收复失地 刚刚准备在浏览器上输入他网站的地址,结果却停了下来:如果入侵者在首页挂了马,我岂...
SUN Solaris
问题
小结
SUN服务器可能遇到的
问题
总结(一) 1) Q:现在遇到这样一个
问题
,telnet一台SUN机时报下面的错误: No utmpx entry. You must exec "login" from the lowest level "shell". 我做了下面的...
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分... 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA请教怎
C语言笔试题
用预处理指令#define 声明一个常数,用以表明1年
中
有多少秒(忽略闰年
问题
) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的...
(转)C/C++面试题大汇总 .
最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。 发布之前先申明两点: 1 所有资料来自网络(主要是...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章