SOS!!!!!进来吧!为什么VC调用DELPHI的DLL总是出错误,知道者出来说句话吧!

anteye 2003-02-27 10:08:50

错误信息:the value of ESp was not properly saved across a function call. this is usually a result of calling a function declared with one calling converntion with a function pointer declared with a diffferent calling convention

DELPHI的DLL声明如下:
function FindMin(numA : PChar; numB :PChar):PChar ;StdCall

implementation

function FindMin; external 'PENNIESLIB.DLL' name 'FindMin';


VC调用如下:
#define DllExport __declspec(dllimport) _stdcall
extern "C" char * DllExport FindMin(char * numA,char * numB);
....


VERIFY(hIn=::LoadLibrary("PenniesLib.dll"));
VERIFY(p_Result=(MINTYPE*)::GetProcAddress((HMODULE)hIn, "FindMin"));

i_return=(*p_Result)("ss","dd"); //错误信息就在这一行出现!

这个问题几天了都有没有解决?
VC能调用DELHPI写DLL的吗?调用过的请帮帮吧!

...全文
38 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
anteye 2003-02-28
  • 打赏
  • 举报
回复
typedef char* (__stdcall *pFindMin)( char * numA,char * numB);
//
// __stdcall 这里的问题

anteye 2003-02-28
  • 打赏
  • 举报
回复
TO: everandforever(Forever)

非常谢谢你,
在你的提示下程序调试过了,
结帐!
demetry 2003-02-28
  • 打赏
  • 举报
回复
^_^
demetry 2003-02-27
  • 打赏
  • 举报
回复
^_^,楼主等一下。我问一下我的同事,他是“三中全会”!
anteye 2003-02-27
  • 打赏
  • 举报
回复
难不成没有VC,DELPHI都会的人吗?岂有此理!!!
anteye 2003-02-27
  • 打赏
  • 举报
回复
up
anteye 2003-02-27
  • 打赏
  • 举报
回复
快来帮帮吧!
如果没有解决这个问题,下面的都进行不下去!

yndfcd 2003-02-27
  • 打赏
  • 举报
回复
VC调用Delphi做的DLL应该是不会有什么问题的。
我看楼主声明了
extern "C" char * DllExport FindMin(char * numA,char * numB);又用了LoadLibary和GetProcAddress,不知是何用意。
同时MINTYPE的声明没有给出,问题很可能出现在这里。不知道MINTYPE是宏还是用typedef定义的一个类型,最好检查一下MINTYPE的定义。如果在其中用了其它类型的calling convention当然就会出错。
Bird1945 2003-02-27
  • 打赏
  • 举报
回复
#define DllExport extern "C" __declspec(dllimport)
DllExport char* __stdcall FindMin(char * numA,char * numB);

有没有用呢,

这些参数的顺序会不会对执行有所影响??

关注!
Bird1945 2003-02-27
  • 打赏
  • 举报
回复
写DLL时, 一定要用 __stdcall 这一类东西.

来保证不同编译器下,调用方式一致




AthlonxpX86 2003-02-27
  • 打赏
  • 举报
回复
这是DLL的一个缺点,DLL和调用端如果是不同的编译器编译出来总是会出现这样或那样无法解释的错误,所以才出现了COM,所以建议你不要用DELPHI调用VC下编译出来的DLL,虽然有时能编译成功,但是也问题多多,用COM吧
anteye 2003-02-27
  • 打赏
  • 举报
回复
13873234291
everandforever 2003-02-27
  • 打赏
  • 举报
回复
typedef char* (__stdcall *pFindMin)( char * numA,char * numB);

pFindMin p_Result;

VERIFY(hIn=::LoadLibrary("PenniesLib.dll"));
VERIFY(p_Result=::GetProcAddress((HMODULE)hIn, "FindMin"));

i_return=p_Result("ss","dd");

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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