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 只載入指定檔案,並不會自動...