静态调用不同的dll中相同函数名,如何链接?
我有几个dll文件,a.dll和b.dll都有一个输出函数test。
a.dll的源码
======================================================================================
a.cpp
#include <windows.h>
namespace a
{
int WINAPI test(void)
{
return 0;
}
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
return TRUE;
}
--------------------------------------------------------------------------------------
a.def
LIBRARY a
EXPORTS
test
======================================================================================
b.dll的源码
======================================================================================
b.cpp
#include <windows.h>
namespace b
{
int WINAPI test(void)
{
return 1;
}
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
return TRUE;
}
--------------------------------------------------------------------------------------
b.def
LIBRARY b
EXPORTS
test
======================================================================================
我现在想做一个c.dll,也包含test输出函数,在奇数时调用a.dll中的test,偶数时调用b.dll中的test。
于是我将a.lib,b.lib复制到c的目录下。
c.dll的源码如下:
======================================================================================
c.cpp
#include <windows.h>
#pragma comment(lib, "a.lib")
#pragma comment(lib, "b.lib")
namespace a
{
int WINAPI test(void);
}
namespace b
{
int WINAPI test(void);
}
namespace c
{
int WINAPI test(void)
{
static int i;
i++;
if(i%2)
{
return a::test();
}
else
{
return b::test();
}
}
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
return TRUE;
}
--------------------------------------------------------------------------------------
c.def
LIBRARY c
EXPORTS
test
======================================================================================
c.dll程序可以通过编译,却无法链接。请问高手,这样的程序该如何链接。
我不要LoadLibrary动态加载,动态加载dll我也会。只要静态编译链接,如何实现?