Delphi调VC写的DLL的一个怪现象 ( 积分: 50 )

  • 主题发起人 主题发起人 yzb
  • 开始时间 开始时间
Y

yzb

Unregistered / Unconfirmed
GUEST, unregistred user!
我用VC写了一个DLL,如果用Delphi调里面无参数的方法是没问题的,可是传字符串过去就有问题:
Test.cpp有如下的代码
int Image_XML(){
...
}
...
int BC(LPCTSTR para1){
return Image_XML();
}

Test.h 如下:
extern "C" _declspec(dllexport) int Image_XML();
extern "C" _declspec(dllexport) int BC(LPCTSTR para1);

在Delphi中申明:
function Image_XML():integer;stdcall;external DLL;
function BC(Param:Pchar):integer;stdcall;external DLL;

如果调用Image_XML是没有错的,如果调用如下
BC('xxxx');
则有一个地址错,我是想把这个xxxx传给VC的DLL,现在是为什么会出这种地址错呢,我试一另一个方法,把VC里的LPCTSTR改为 CString ,出现一个Application-defined Exception.
第一次写VC,救命呀.
 
我用VC写了一个DLL,如果用Delphi调里面无参数的方法是没问题的,可是传字符串过去就有问题:
Test.cpp有如下的代码
int Image_XML(){
...
}
...
int BC(LPCTSTR para1){
return Image_XML();
}

Test.h 如下:
extern "C" _declspec(dllexport) int Image_XML();
extern "C" _declspec(dllexport) int BC(LPCTSTR para1);

在Delphi中申明:
function Image_XML():integer;stdcall;external DLL;
function BC(Param:Pchar):integer;stdcall;external DLL;

如果调用Image_XML是没有错的,如果调用如下
BC('xxxx');
则有一个地址错,我是想把这个xxxx传给VC的DLL,现在是为什么会出这种地址错呢,我试一另一个方法,把VC里的LPCTSTR改为 CString ,出现一个Application-defined Exception.
第一次写VC,救命呀.
 
不知道哦,没玩过
好像PCHAR 对应 char*?
 
VC的兄弟看过来呀....[:D]
 
可能是这个原因

关键在于你的VC DLL声明中的参数调用方式与在Delphi中引用时的方式必须一致。
如果VC DLL中声明为__cdecl,在Delphi中也必须声明为 cdecl,
如果VC DLL中声明为__stdcall,在Delphi中也必须声明为 stdcall。
 
To iKing:
非常感谢,真的是声明方法不一样引起的,全给你分了,^_^,在Delphi中改为cdecl 的调用方式就解决了.
 
后退
顶部