如何在Visual Studio中仅编译和链接少数文件并排除其他文件

xvw2m8pv  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(164)

我正在做一个Visual Studio C++项目,它使用Oracle作为数据库。我已经重构了它,现在它也支持PostgreSQL。我正在使用宏来选择B/w Oracle和PostgreSQL。当我们运行代码时,它需要Oracle和PostgreSQL的客户端dll。
由于它在编译时只决定使用哪个数据库,所以可以只编译和链接Oracle或PostgreSQL相关的代码和库吗?一个可能的解决方案是为两者提供2个不同的代码库。我能想到的另一个解决方案是创建两个不同的库并相应地链接,但我不知道如何实现这一点。
请指引我。

68bkxrlz

68bkxrlz1#

您可以动态加载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

相关问题