【发布时间】:2022-01-23 22:20:47
【问题描述】:
我正在 Visual Studio 2019 中构建解决方案。
此解决方案中有 2 个项目:TestingRunner2 和 TestingDLL2。
在 TestingDLL2 中,我正在尝试创建我的 DLL 库(在我的例子中是一种方法), 在 TestingRunner2 中我试图调用这个方法。
这是一般项目结构:
这是 dllmain.c 文件内容:
#include "pch.h"
#define EXPORTING_DLL
#include "dllmain.h"
#include <iostream>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
void HelloWorld() {
std::cout << "Hello World !~!~!";
}
最后是 dllmain.h 内容:
#ifndef DLLMAIN
#define DLLMAIN
#ifdef EXPORTING_DLL
extern __declspec(dllexport) void HelloWorld();
#else
extern __declspec(dllimport) void HelloWorld();
#endif
#endif
我实际上想要做的是,从TestingRunner2.cpp 文件中调用 HelloWorld() 函数。
dllmain.c 和 dllmain.h 的内容是否正确?
如果是,我应该在TestingRunner2.cpp 中写什么才能达到我的目的?
【问题讨论】:
-
看起来像一个心理障碍,“dllmain.h”对于需要在客户端应用程序中#included 的文件来说是一个非常奇怪的名称。称它为 hello.h,您可能会领先。
-
我认为visual studio 2019默认选择这个名字。
-
@XY:Hans 有一个观点。您现在需要在 testingRunner.cpp 中写入
#include "dllmain.h"。这在形式上是正确的,但看起来很奇怪。另外,请确保使 EXE 项目依赖于 DLL 项目。 -
@MSalters 如何让EXE项目依赖DLL项目?因为当我在
TestingRunner2.cpp的顶部写#include "dllmain.h"时,调试器说没有这样的文件或目录。我认为这就是问题所在。 -
首先,将您的 DLL 添加到您的 EXE 的引用中。然后通过指定其相对名称 (
#include "../TestingDLL2/dllmain.h") 来包含您的标题。
标签: c++ visual-studio dll