首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个c++的dll调用的有关问题,发了N张帖子没多少分了,请见谅

2012-09-20 
请教一个c++的dll调用的问题,发了N张帖子没多少分了,请见谅现在手上有一个myDll.dll文件,用查看工具得到的

请教一个c++的dll调用的问题,发了N张帖子没多少分了,请见谅
现在手上有一个myDll.dll文件,用查看工具得到的结果是:
void_cdecl Trim(char *) 

这个dll的cpp文件是:

C/C++ code
#ifdef   _cplusplus     extern   "C"{     #endif     __declspec(dllexport)   void   Trim(LPSTR   lpString)     {·········   }


我现在需要在别的dll里面调用这个dll,先进行定义,

typedef void (_cdecl *abc)(char *x); 问题1:这是对的吗?

问题2如下代码调用为什么有错误了?:
C/C++ code
HMODULE dlh = NULL;     abc ab;      if (!(dlh=LoadLibrary("myDll.dll")))        {                  printf("LoadLibrary() failed: %d\n", GetLastError());    //这里没有执行说明,加载成功   }      if (!(ab =(abc)GetProcAddress(dlh, "Trim"))){              printf("GetProcAddress() failed: %d\n", GetLastError());           //这里执行了,并且报GetProcAddress() 127的错    }  




[解决办法]
问题1写法正确。
问题2:看起来倒没有问题,使用了extern "C",理应不会发生函数名称改编,不过既然GetProcAddress出现了127错误就已经证明了函数名称Trim发生了改编,不知lz使用的是什么编译器?试试这样写会不会起作用?
__declspec(dllexport) void _cdecl Trim(LPSTR lpString);
或者尝试为Trim函数使用def文件强制其不进行名称改编或者尝试使用dll隐式加载。

热点排行