错误信息: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 conventionDELPHI的DLL声明如下:
function FindMin(numA : PChar; numB :PChar):PChar ;StdCallimplementationfunction 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的吗?调用过的请帮帮吧!

解决方案 »

  1.   

    难不成没有VC,DELPHI都会的人吗?岂有此理!!!
      

  2.   

    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");
      

  3.   

    这是DLL的一个缺点,DLL和调用端如果是不同的编译器编译出来总是会出现这样或那样无法解释的错误,所以才出现了COM,所以建议你不要用DELPHI调用VC下编译出来的DLL,虽然有时能编译成功,但是也问题多多,用COM吧
      

  4.   

    写DLL时, 一定要用 __stdcall 这一类东西.来保证不同编译器下,调用方式一致
      

  5.   

    #define DllExport extern "C" __declspec(dllimport) 
    DllExport char* __stdcall FindMin(char * numA,char * numB); 有没有用呢,这些参数的顺序会不会对执行有所影响??关注!
      

  6.   

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

  7.   

    TO:  everandforever(Forever) 非常谢谢你,
    在你的提示下程序调试过了,
    结帐!
      

  8.   

    typedef char* (__stdcall *pFindMin)( char * numA,char * numB); 
    //
    //  __stdcall 这里的问题