託管非託管Dll動態呼叫

2022-03-12 00:46:42 字數 1554 閱讀 9156

最近經常看到有人問託管非託管

dll呼叫的問題。對於動態庫的呼叫其實很簡單。網上很多**都實現了

dll的靜態呼叫方法。我主要談論下動態庫的動態載入。

對於託管動態庫,實現動態載入很簡單。

/files/dwwwing/dlldemo.rar

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。

對於非託管dll的呼叫。相對託管動態庫來說麻煩一點,但是也是很簡單的。

使用三個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 呼叫...