【发布时间】: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
需要遵循任何其他代码或程序吗?这可行吗?
【问题讨论】:
-
那是你的实际代码吗?你真的有任何函数之外的语句吗?请尝试创建Minimal, Complete, and Verifiable Example 并展示给我们。