我做了个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型而不是字符串就没事。
{
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型而不是字符串就没事。
与
typedef void (__stdcall *TApiStr)(char *str);
之间调用约定不一致。
TApiStr myapi = (TApiStr)GetProcAddress(LoadLibrary("mydll.dll") ,"ApiStr");
myapi(buf);