【问题标题】:Call a function in a DLL library from another project but in the same solution从另一个项目但在同一解决方案中调用 DLL 库中的函数
【发布时间】: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.cdllmain.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


【解决方案1】:

如果您确定您的 dll 可以成功构建,MSDN 中有一个document 解释了这个问题。文档后半部分说明了链接dll的步骤,大家可以参考一下。

【讨论】:

  • @XY,你有更新吗?如果您的案例已经解决,请帮忙标记答案。如果没有,请随时与我们联系。您的理解与合作将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多