【问题标题】:Include header file of another project into DLL project将另一个项目的头文件包含到 DLL 项目中
【发布时间】:2015-05-15 20:52:15
【问题描述】:

我创建了一个使用 DLL 文件并调用其内部函数的测试应用程序。

我按照链接中给出的步骤操作: Dynamically load a function from a DLL

我有 Win32 控制台应用程序和一个 DLL 创建器应用程序。理想情况下,Win32 应用程序 LoadLibrary() 和 GetsProcAddress() 并通过传递参数获取 DLL 内特定函数的函数指针,返回结果,一切正常。

现在,我需要做的是,我需要从控制台应用程序调用 DLL 中的函数,而在 DLL 函数中,我需要调用 Win32 控制台应用程序中的函数来获取值,而不是作为参数传递。

这样的,

1) 将 Win32 控制台项目中使用的相同头文件包含到 DLL 项目中。 2)当DLL项目内的函数被Win32控制台项目调用时 3) 从控制台项目中获取值,对其进行处理并将值设置回控制台应用程序

dllmain.cpp:

#include "evaluate.h"

extern "C" __declspec(dllexport) int _cdecl ADD(void)
{
    int a = getValueOfA();
    int b = getValueofB();
    setValueOfC((a+b));
}

评估.cpp:

int getValueOfA(void)
{
    return 3;
}

int getValueOfB(void)
{
    return 5;
}

void setValueOfC(int c)
{
    printf("\nValue of C is: %d",c);
}

HINSTANCE hGetProcIDDLL;
typedef int(_cdecl *func_ptr)();
hGetProcIDDLL = LoadLibrary("MyDll.dll);
func_ptr addFunc = (func_ptr)GetProcAddress(hGetProcIDDLL, "ADD");
addFunc();

评估.h

int getValueOfA();
int getValueOfB();
void setValueOfC(int value);

MyDll.def:

EXPORTS
    ADD   @1

需要遵循任何其他代码或程序吗?这可行吗?

【问题讨论】:

标签: c++ dll


【解决方案1】:

虽然 DLL 可以导入由主应用程序导出的符号,但它相当复杂。

一种更简单(更容易调试,因此“更好”)的方法是将函数指针传递给 DLL,通过它可以回调应用程序函数。

这可以作为函数指针类型的函数参数来完成,传递给将使用它的函数。或者可以提前很长时间配置好,保存在DLL中的一个全局变量中,需要它的函数获取这个全局变量,然后间接调用。

您可以在整个 Windows API 中看到回调函数指针的示例 - 几乎所有名为 EnumXYZ 的 API 函数都接受回调。保存函数指针以供以后使用的示例是窗口过程,它由RegisterClass 存储,然后在消息处理SendMessageGetMessageDispatchMessage 等期间使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2012-03-11
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多