用vc6.0创健dll时发现了一个bug
选择win32dynamic-link libary
然后选择 A dll that exports some symbols创建一个工程
用这种方法生成的dll不能使用,因此编译器在生成dll的时候
莫名其妙的给每个函数前加上了一些字符
比如你写的Dll里面有一个函数GetName(),生成的Dll里面函数名
会变成??GetName()之类的名字,这样在调用GetProcAddress时就会出错
不知道有没有 人知道其解决方法
这不是Bug,编译器会将导出函数编译为C++、C...等等下的函数。
你可以用相关工具如Editplus或depend打开dll,找到该外部函数名,连同这些乱七八糟的字符一并复制到调用的函数名位置,如: GetProdcessAderss(hInstance,"此处为带有乱七八糟的字符函数名");
这不是bug,如果把dll写成纯资源的形式就可以避免了
一般显式链接DLL和使用DLL中函数的例子:
1.DLL中有如下函数:
void Initialize()
{
AfxMessageBox(_T("Hello!"));
}
2.EXE中调用:
HMODULE hDll = LoadLibrary(mydll.dll);
ASSERT(hDll);
typedef void(*FUN)();
FUN pfun;
pfun = (FUN)GetProcAddress(hDll , "Initialize");// 通过函数名称,得到函数地址
if(!pfun)
{
AfxMessageBox(_T("函数地址为空!"));
return;
}
else
{
(*pfun)(); // 调用Initialize函数
}