VC8(2005) 编译的DLL 无法使用

penguinhehe 2010-03-25 04:49:59
各位大侠, 我泣血百拜

我用VC6写了DLL 使用供别人 Delphi调用 没问题
VC 定义

extern "C" int _declspec(dllexport) TestC(int i); (默认调用方式 cdecl)

delphi 调用
function TestC(i:integer):integer;cdecl; external ’MyDll.dll’;


后来,由于某些C++的API的缘故,我使用VC8(VC2005),头文件(定义)没改,结果Delphi不能调用了,
无论用stdcall 还是cdecl 都不行,真是烦人

现象是 不指定STDCALL 的话,Delphi调用程序,死在那里
制定STDCALL (DELPHI的 cdecl 相应的改为stdcall),就报找不到方法,不知哪位大侠有解决之道?
...全文
71 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
penguinhehe 2010-03-29
  • 打赏
  • 举报
回复
多谢各位大侠,问题解决了,虽然问题的本质和各位说的不一样(这是我自己的原因,问题定位有些问题),不过各位的回答,是我知道了那个本地编译的问题,呵呵,有是有收获的。谢了
BOBSHEN 2010-03-26
  • 打赏
  • 举报
回复
八成是函数名的问题,VC输出的函数名确实前面会加@之类的字符
柯本 2010-03-26
  • 打赏
  • 举报
回复
可能是编译选项的问题,参考:
http://topic.csdn.net/u/20100312/14/b2534039-f094-4719-accd-5b81f9fad431.html

sanguomi 2010-03-26
  • 打赏
  • 举报
回复
你用工具看下DLL里函数的名称
YeBinYe 2010-03-25
  • 打赏
  • 举报
回复
同时Delphi中的函数应该同为_stdcall调用方式,才能避免找不到方法
YeBinYe 2010-03-25
  • 打赏
  • 举报
回复
采用__stdcall标准调用方式,可以避免此问题,否则在Delphi内的调用函数应该修改在每个调用函数前加"_"或"@",具体的话建议楼主用execope软件可以查到你的dll导出函数.
extern "C" int _stdcall(dllexport) TestC(int i);
阿发伯 2010-03-25
  • 打赏
  • 举报
回复
是否VC编译时没使用C编译而采取了默认的C++编译?
风之谷 2010-03-25
  • 打赏
  • 举报
回复
不知道,没用过VC 帮顶

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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