我正在开发一个使用 Oracle 作为数据库的 Visual Studio C++ 项目。我重构了它,现在它也支持 PostgreSQL。我正在使用宏来选择 b/w Oracle 和 PostgreSQL。当我们运行代码时,它需要 Oracle 和 PostgreSQL 的客户端 dll。
既然在编译时决定只使用哪个DB,那么是否可以只编译和链接Oracle或PostgreSQL相关的代码和库?一种可能的解决方案是为两者设置 2 个不同的代码库。我能想到的另一个解决方案是创建 2 个不同的库并相应地链接,但我不知道如何实现。
请指导我。
您可以动态加载 dll:
if( using dll A...)
{
...
// the function to load
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
供您参考:API GetProcAddress