【发布时间】:2020-02-24 04:33:41
【问题描述】:
我使用msvc 2019 编译器在windows 10 上使用/MDd 标志创建了一个简单的dll。 dll 只包含一个简单的添加函数(就像在所有教程中一样)。构建此库后,我已将其复制到测试文件夹中以进行显式链接。基本上,如果我给它提供dll 的完整绝对路径,测试就会通过,但如果我只提供dll 的名称,它就不会加载。
这里是测试代码:
//test_add.cpp
#include <windows.h>
#include "gtest/gtest.h"
TEST(test, test_add_windows) {
#if defined(_WIN32) || defined (_WIN64)
typedef int (*addPtr)(int, int);
// full path works and the test passes
HINSTANCE hinstLib = LoadLibrary(TEXT("D:\\ACrossPlatformCppLibrary\\test\\ACrossPlatformCppLibrary.dll"));
// relative path does not work: library fails to load
// HINSTANCE hinstLib = LoadLibrary(TEXT("ACrossPlatformCppLibrary.dll"));
std::cout << hinstLib << std::endl;
ASSERT_NE(hinstLib, nullptr);
auto add = (addPtr) GetProcAddress(hinstLib, "add");
ASSERT_NE(add, nullptr);
int x = 5;
int y = 6;
int answer = add(x, y);
ASSERT_EQ(answer, 11);
BOOL fFreeResult = FreeLibrary(hinstLib);
#else
ASSERT_TRUE(true);
#endif
}
还有我的目录树
【问题讨论】: