簡體   English   中英

將另一個項目的頭文件包含到DLL項目中

[英]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存儲,然后在消息處理SendMessageGetMessageDispatchMessage等過程中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM