如果动态库中导出的函数声明是:
    extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);
我在使用动态库时导入:
    extern "C" __declspec(dllimport) int mydllfunc(int);

    extern "C" __declspec(dllimport) int __stdcall mydllfunc(int);两种声明都是正确的吗?两种情况有什么区别?

解决方案 »

  1.   

    你如果是用mfc或者window.h,调用方式都是__stdcall,从右到左的。
      

  2.   

    c的默认调用约定是_cdecl
    delhpi默认调用约定是_stdcall
    协调一致就行
      

  3.   

    当有多个参数时,就会出现Debug error,调用参数形式与声明参数形式不一致。
      

  4.   

    delhpi默认调用约定是_stdcall???
    怎么我看delphi7帮助文档说是默认是register
      

  5.   

    两种声明是不同的,vc默认的调用是__cdecl ,所以 extern "C" __declspec(dllimport) int mydllfunc(int);是extern "C" __declspec(dllimport) int __cdecl mydllfunc(int);
    因此和extern "C" __declspec(dllimport) int __stdcall mydllfunc(int);是有区别的
      

  6.   

    但我的动态库,导出声明是stall啊
     extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);倒入声明:
    extern "C" __declspec(dllimport) int mydllfunc(int);会改变调用方式吗?
      

  7.   

    但我的动态库,导出声明是stall啊
     extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);倒入声明:
    extern "C" __declspec(dllimport) int mydllfunc(int);会改变调用方式吗?
      

  8.   

    我也有同样的疑惑,实际证明是,导入中加了__stdcall反而报错。导入是默认的__codec,导出是__stdcall,反而能通过。谁能澄清一下,导入和导出函数的调用约定是否应一致??
      

  9.   

    尽管大家说的都是正确的,但是大家还是没有回答我的问题:
    如果动态库中导出的函数声明是:
        extern "C" __declspec(dllexport) __stdcall int mydllfunc(int);
    我在使用动态库时导入:
        //这应该是非法的吧?可是为什么编译器能够通过
        extern "C" __declspec(dllimport) int mydllfunc(int);

        //这应该是正确的,为什么编译时会认为__stdcall mydllfunc(int)是无法解析的外部符号?
        extern "C" __declspec(dllimport) int __stdcall mydllfunc(int);所以,我只好把分给最后一位明白了我的意思,却与我一样不明白的兄弟。