close
文章出處
來至:http://bbs.mini188.com/showtopic-161.aspx
前段時間寫了一個讀卡器程序,使用到了一個DLL。在.NET 中調用DLL還是相當簡單的。我也是轉別人的代碼,自己的不寫。下面就是代碼:
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)
{
int hmod=LoadLibrary("*****.dll");
int pFname=GetProcAddress(hmod, "*****");
CallWindowProc(pFname,0,0,0);
FreeLibrary(hmod);
}
前段時間寫了一個讀卡器程序,使用到了一個DLL。在.NET 中調用DLL還是相當簡單的。我也是轉別人的代碼,自己的不寫。下面就是代碼:
C#中要使用動態鏈接庫中的導出函數,只能在程序中根據DllAtribute顯示調用,無法在運行階段動態加載,但是我們可以利用WIN32 API的LoadLibrary和FreeLibrary打到目的,問題是根據GetProcAddress()函數獲取到的導出函數的地址無法在C#中利用,網上很多方法多是利用對函數調用棧的操作來達到在C#中操作的目的. 其實如果導出函數沒有返回值,完全可以利用另一個API函數達到動態綁定DLL庫的目的:






如果導出函數無形參也無返回值的話,可以直接調用CallWindowProc(FunctionName,0,0,0,0),如果我們需要向導出函數傳遞簡單參數的話,也可以自定義一個消息,用消息封裝實參。
















![]() |
不含病毒。www.avast.com |
全站熱搜