extern "C" DllExport long getopenfilename1(char* filename)我在PB中调用此函数,filename是得到了(我在VC代码中Messagebox了一下,filename可以得到)但是return 时出错了(PB提示的)。不知道是不是类型 long 的问题???
提示:
error:Specified argument type differs from argument type at runtime in DLL function getopenfilename1(invalid stack pointer on return from function call)............

解决方案 »

  1.   

    如果是调用约定,可以参考:
    http://dev.csdn.net/develop/article/25/25141.shtm
    http://dev.csdn.net/develop/article/25/25142.shtm
    http://dev.csdn.net/develop/article/25/25143.shtm
    http://dev.csdn.net/develop/article/31/31511.shtm
    http://dev.csdn.net/develop/article/52/52485.shtm
      

  2.   

    跨语言调用的DLL,导出函数的调用约定必须为__stdcall.
      

  3.   

    我用的是这样的:
    #define DllExport _declspec(dllexport)
    extern "C" DllExport long getopenfilename1(char*);
      

  4.   

    我是这样用的:
    #define DllExport _declspec(dllexport)
    extern "C" DllExport long getopenfilename1(char*);
    以上要返回错误但是这样就没有问题;
    我是在getopenfilename1动态分配一个内存,然后返回这个内存中的内容,是没有问题的,但是不知道怎么去销毁在DLL中申请的内存
    #define DllExport _declspec(dllexport)
    extern "C" DllExport char* getopenfilename1();
      

  5.   

    DllExport char * _stdcall getopenfilename();
      

  6.   

    加上__stdcall约定,用.DEF文件导出
      

  7.   

    #define DllExport _declspec(dllexport)
    extern "C" DllExport long getopenfilename1(char*);
    ==========================
    #define DllExport _declspec(dllexport)
    extern "C" DllExport long __stdcall getopenfilename1(char*);
      

  8.   

    用DEF文件导出,参考:
    http://www.xiaozhou.net/cooldog/blogview.asp?logID=42