[英]Include header file of another project into DLL project
我創建了一個使用DLL文件並調用其內部函數的測試應用程序。
我按照鏈接中給出的步驟進行操作: 從DLL動態加載函數
我有Win32控制台應用程序和DLL創建程序應用程序。 理想情況下,Win32應用程序LoadLibrary()和GetsProcAddress()並通過傳遞的參數獲取DLL中該特定函數的函數指針,返回結果,所有工作正常。
現在,我需要做的是,從控制台應用程序中,我需要在DLL中調用一個函數,而在DLL函數中,我需要在Win32控制台應用程序中調用一個函數,以獲取值,而不是將其作為參數傳遞。
像這樣
1)將Win32控制台項目中使用的相同頭文件包含到DLL項目中。 2)當Win32控制台項目調用的DLL項目內部的函數時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();
評估
int getValueOfA();
int getValueOfB();
void setValueOfC(int value);
MyDll.def:
EXPORTS
ADD @1
是否需要遵循其他任何代碼或過程? 這可行嗎?
雖然DLL可以導入由主應用程序導出的符號,但它相當復雜。
一種更簡單(更容易調試,因此“更好”的方法)是將函數指針傳遞給DLL,通過它可以回調到應用程序函數。
這可以作為函數指針類型的函數參數完成,並傳遞給將使用它的函數。 或者可以對其進行長期配置,並將其保存在DLL中的全局變量中,需要它的函數將檢索此全局變量並將其用於間接調用。
您可以在整個Windows API中看到回調函數指針的示例-幾乎任何名為Enum
XYZ
API函數都接受回調。 保存函數指針供以后使用的一個示例是窗口過程,該過程由RegisterClass
存儲,然后在消息處理SendMessage
, GetMessage
, DispatchMessage
等過程中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.