delphi写的dll在vc++中调用问题(150分)

  • 主题发起人 主题发起人 alvinlv
  • 开始时间 开始时间
A

alvinlv

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi写了个dll: function SaveBFile( sReceiver, sFileName : PChar;
Var Buffer;
iBufLen : Integer ) : Integer;
stdcall;
用deiphi 写的程序调用这个dll没有问题。可是vc++调用时,
系统提示:The value of ESP was not propely saved across a function call.
vc++
*.h:
int ( * savebfile ) ( char * sRec,
char * sFileName,
char * sCon,
int len);
*.cpp:
hDll = LoadLibrary(dllname);
if (hDll != NULL) {
savebfile = ( int (*) ( char *, char *,
char *, int) )
GetProcAddress(hDll,"SaveBFile");
( * savebfile ) ("2000000001", "kk.txt", "kklf", 12);
}
虽然发生错误, 但dll的功能却执行完了。
个人怀疑是由于buffer 参数传递的问题.
请教各位大侠错误的原因,及如何才能正确调用?
 
你在delphi中声明为stdcall,则在 VC++中必须也声明为 stdcall;(C/C++缺省是 cdecl)
这两者的区别就在于参数堆栈由谁来清理,因此功能可以正常实现,但返回后就出现你所遇到的错误。
 
c ++ 声明 stdcall 应该写在那里?
另外, 我用delphi 写的程序调用delphi 写的 dll时, 程序退出时, 系统告诉我
非法操作, 如果在nt 机器上, 系统喇叭会发出一声响。 怪。
 
>>c ++ 声明 stdcall 应该写在那里?
比如:
int __stdcall ( * savebfile ) ( char * sRec, char * sFileName, char * sCon, int len);
大致如此吧,很久没用了。
>>另外, 我用delphi 写的程序调用delphi 写的 dll时, 程序退出时,
>>系统告诉我非法操作, 如果在nt 机器上, 系统喇叭会发出一声响。 怪。
慢慢调吧,也许也有类似问题 :-)
 
呵呵。 温柔一刀 你这150分来的可真容易啊。 ( 其实是我好心痛 ! )
 
温柔一刀,算了算了,是不是心情不好?想来这位是想开玩笑结果方式不对罢了。
 
对不起,是心情不太好,太忙了,明天开始估计很少来了,
贴子我改掉,反正牢骚已经发完了,唉!...
 
什么乱七八糟的,怎么不懂上面两位的话!!!心情不好与这个问题有何关系?
 
only you 看不懂,我们都明白 ;-)
 
那你告诉我啊!你不说我怎么知道?
 
接受答案了.
 
后退
顶部