我做了个dll,里面暴露一个api定义如下extern "C" __declspec(dllexport) void ApiStr(char *str);实现上也就是void ApiStr(char *str)
{
   MessageBox(0,str,0,0);
}
然后在app里调用这个APItypedef void (__stdcall *TApiStr)(char *str);TApiStr myapi = (TApiStr)GetProcAddress(LoadLibrary("mydll.dll") ,"ApiStr");然后一调用 myapi("test str") 就报错,然后崩溃。为什么呢?
api肯定是找到了的,如果参数是int型而不是字符串就没事。

解决方案 »

  1.   

    可能是extern "C" __declspec(dllexport) void ApiStr(char *str);

    typedef void (__stdcall *TApiStr)(char *str);
    之间调用约定不一致。
      

  2.   

    定义 char *buf='test str';
    TApiStr myapi = (TApiStr)GetProcAddress(LoadLibrary("mydll.dll") ,"ApiStr");
    myapi(buf);
      

  3.   

    你将typedef void (__stdcall *TApiStr)(char *str);中的__stdcall 去掉试试。
      

  4.   

    谢谢各位,果然是stdcall,两边没有一致,随便改那一边都能成