最近經常看到有人問託管非託管
dll呼叫的問題。對於動態庫的呼叫其實很簡單。網上很多**都實現了
dll的靜態呼叫方法。我主要談論下動態庫的動態載入。
對於託管動態庫,實現動態載入很簡單。
/files/dwwwing/dlldemo.rar
對於非託管dll的呼叫。相對託管動態庫來說麻煩一點,但是也是很簡單的。code
=assembly.loadfile(filepath);
//這裡是動態庫的路徑。
type tp
=ass.gettype(dlltype);
//dlltype是你所需要呼叫的動態庫檔案的命名空間+類名(namespace.class)
methodinfo method
=tp.getmethod(function);
//需要執行的函式
object
ob =
activator.createinstance(tp);
//建立物件
method.invoke(ob,
null
);//
執行函式,後乙個引數即為執行函式需要的引數,若無則為null。
使用三個api函式:loadlibrary,getprocaddress,freelibrary。
使用loadlibrary將非託管dll載入到記憶體中。呼叫getprocaddress獲取需呼叫的函式指標。將非託管函式指標轉換為委託即可。最後呼叫freelibrary釋放載入載入的非託管記憶體(載入後必須釋放非託管記憶體)。
完成上面的函式宣告後,接著我們先定乙個委託.code
system;
using
system.collections.generic;
using
system.text;
using
system.runtime.interopservices;
namespace
dlltest
public
delegate invoke(
string
funname, type type)
~dllinvoke()}}
code
delegate
bool
dodllfunction();
//如果需要執行的函式有引數,可對之進行宣告。
dllinvoke dllinvoke
=new
dllinvoke(filepath);
//非託管dll檔案路徑
dodllfunction show
=(dodllfunction) dllinvoke.invoke(initfunction,
typeof
(dodllfunction));
//initfunction為需要執行的函式名
show();
//執行方法,可根據定義決定是否需要傳引數
c 託管非託管Dll動態呼叫
最近經常看到有人問託管非託管dll呼叫的問題。對於動態庫的呼叫其實很簡單。網上很多 都實現了dll的靜態呼叫方法。我主要談論下動態庫的動態載入。對於託管動態庫,實現動態載入很簡單。files dwwwing dlldemo.rar code assembly.loadfile filepath 這裡...
託管呼叫非託管的DLL
dllimport createnewprocess.dll charset charset.unicode public static extern bool createprocess marshalas unmanagedtype.lpwstr string fullpath 以上是定義入口,...
C 呼叫託管DLL與非託管DLL
dll之前使用過幾次,但是最近使用時,又出各種問題。最後弄到晚上十二點多了,看到網上乙個建立dll的 教程,按上面的講解,成功實現了c 呼叫自己建立的dll。之所以耗了這麼久時間,是因為我本想憑自己記憶實現dll建立呼叫,但是各種問題隨即產生。不說了,割了 今天上午再次整理,覺得有必要記錄。c 呼叫...