C 中實現動態載入dll庫

2021-04-12 14:33:44 字數 1043 閱讀 8125

c#中要使用動態鏈結庫中的匯出函式,只能在程式中根據dllatribute顯示呼叫,無法在執行階段動態載入,但是我們可以利用win32 api的loadlibrary和freelibrary打到目的,問題是根據

getprocaddress()函式獲取到的匯出函式的位址無法在c#中利用,網上很多方法多是利用對函式呼叫棧的操作來達到在c#中操作的目的.

其實如果匯出函式沒有返回值,完全可以利用另乙個api函式達到動態繫結dll庫的目的:

lresult callwindowproc( wndproc lpprevwndfunc,

hwnd hwnd,

uint msg,

wparam wparam,

lparam lparam

);如果匯出函式無形參也無返回值的話,可以直接呼叫callwindowproc(functionname,0,0,0,0),如果我們需要嚮導出函式傳遞簡單引數的話,也可以自定義乙個訊息,用訊息封裝實參。

[dllimport("kernel32")]

public extern static int loadlibrary(string lplibfilename);

[dllimport("kernel32")]

public extern static bool freelibrary(int hlibmodule);

[dllimport("kernel32", charset=charset.ansi)]

public extern static int getprocaddress(int hmodule, string lpprocname);

[dllimport("user32", entrypoint="callwindowproc")]

public static extern int callwindowproc(int lpprevwndfunc, int hwnd, int msg, int wparam, int lparam);

private void button1_click(object sender, system.eventargs e)

c 實現動態載入Dll

原理如下 1 利用反射進行動態載入和呼叫.assembly assembly assembly.loadfrom dllpath 利用dll的路徑載入,同時將此程式集所依賴的程式集載入進來,需後輟名.dll assembly.loadfile 只載入指定檔案,並不會自動載入依賴程式集.assmbly...

c 實現動態載入Dll

基本思路 1 利用反射進行動態載入和呼叫.assembly assembly assembly.loadfrom dllpath 利用dll的路徑載入,同時將此程式集所依賴的 程式集載入進來,需後輟名.dll assembly.loadfile 只載入指定檔案,並不會自動載入依賴程式集.assmbl...

c 實現動態載入Dll

原文 c 實現動態載入dll 原理如下 1 利用反射進行動態載入和呼叫.assembly assembly assembly.loadfrom dllpath 利用dll的路徑載入,同時將此程式集所依賴的程式集載入進來,需後輟名.dll assembly.loadfile 只載入指定檔案,並不會自動...