C 動態載入嵌入資源 DLL

2022-03-06 08:56:07 字數 2462 閱讀 2225

在resources.resx資源檔案中新增資源後,編譯後資源可以嵌入在exe檔案中,常見的資源有:,音訊,文字等等。在程式中通過如下**即可呼叫:

properties.resources.*****

星號部分就是新增的資源名稱,點出來就有。

同樣在resources.resx中,嵌入乙個編譯好的dll檔案,如db.dll,通過**properties.resources.db,返回型別是byte,二進位制格式。此時,如果想要呼叫其中的方法,字段,需要對這個二進位制資料做處理了。下面是乙個簡單的方法示例:

動態載入dll

(copy code)

/// /// 

動態呼叫資源檔案

///

///

使用到的命名空間

///

使用到的類名

///

呼叫的方法

///

方法的引數陣列(如果沒有則為null)

///

如果呼叫的方法有返回值則返回,如果沒有返回null

public object

invokemethod(

string

namespace,

string

classname,

string

lpprocname,

object

objarray_parameter)

else

system

.windows

.forms

.messagebox

.show(

"方法:"

+lpprocname

+" 不存在!"

); }

else

system

.windows

.forms

.messagebox

.show(

"命名空間:"

+ namespace

+ ",類:"

+ classname

+" 不存在!"

); }

} catch

(exception

e)

return null; }

當然如果不用resources.resx,可以通過新增現有項的方式來新增dll資源,此時,需要修改檔案屬性,【生成操作】改為嵌入的資源,然後通過以下方法來呼叫:

動態載入dll

(copy code)

private byte

loaddll(

string

lpfilename)

catch

(exception

e)

return null;}

/// ///

動態呼叫資源檔案

///

///

dll名

///

使用到的命名空間

///

使用到的類名

///

呼叫的方法

///

方法的引數陣列(如果沒有則為null)

///

如果呼叫的方法有返回值則返回,如果沒有返回null

public object

invokemethod(

string

lpfilename,

string

namespace,

string

classname,

string

lpprocname,

object

objarray_parameter)

else

system

.windows

.forms

.messagebox

.show(

"方法:"

+lpprocname

+" 不存在!"

); }

else

system

.windows

.forms

.messagebox

.show(

"命名空間:"

+ namespace

+ ",類:"

+ classname

+" 不存在!"

); }

} catch

(exception

e)

return null; }

1.呼叫的方法當然只能呼叫公有的或者同程式集的,private是無法呼叫的。

2.以上**修改於網路上某些糟糕的文章,已成功編譯通過。

3.這裡麼有做更詳細的解釋,僅貼了些**,這些東西都能一看理解吧,至少知道該如何使用它。

5.麼有了…

C 載入嵌入到資源的非託管dll

我們總會遇到需要載入非win32的非託管dll,這裡推薦一種方式就是將那些非win32的非託管dll嵌入資源的方式,在入口解壓並且載入的方式,我先來看看如何實現吧,首先我們準備好demo,新增控制台專案如下 如下 static void main string args 解壓資源並且載入非託管dll...

C 動態載入DLL

using system.reflection 利用反射進行動態載入和呼叫.assembly ass assembly.loadfrom dllpath 利用dll的路徑載入 載入dll後,需要使用dll中某類.type type ass.gettype typename 利用型別的命名空間和名稱獲...

C 動態載入DLL

利用反射進行動態載入和呼叫.assembly ass assembly.loadfrom dllpath 利用dll的路徑載入 載入dll後,需要使用dll中某類.type type ass.gettype typename 利用型別的命名空間和名稱獲得型別 需要例項化型別,才可以使用,引數可以人為...