C 實現動態呼叫Windows DLL

2022-01-17 20:56:27 字數 2424 閱讀 7790

部分**來自於網路;廢話不多說,上**:

呼叫方法:

object

obj 

=windllinvoke(

"kernel32.dll", 

"beep", 

newobject

, typeof

(void

));函式**:

1[system.runtime.interopservices.dllimport(

"kernel32")]

2private

static

extern

intptr loadlibrary(

string

lplibfilename);34

[system.runtime.interopservices.dllimport(

"kernel32")]

5private

static

extern

intptr getprocaddress(intptr hmodule, 

string

lpprocname);67

[system.runtime.interopservices.dllimport(

"kernel32")]

8private

static

extern

intptr freelibrary(intptr hlibmodule);910

///11

///動態呼叫windows dll

12///

13///

dll檔名

14///

待呼叫的函式名

15///

函式引數

16///

返回值17

///呼叫結果

18private

static

object

windllinvoke(

string

filename, 

string

funname, 

object

objparams, type returntype)

1936

37//

構建呼叫方法模型

38assemblyname asembyname 

=new

assemblyname();

39asembyname.name ="

windllinvoke_assembly";

40assemblybuilder asembybuilder =41

modulebuilder modulebuilder 

=asembybuilder.definedynamicmodule(

"windllinvoke");

42methodbuilder methodbuilder 

=modulebuilder.defineglobalmethod(

"invokefun

", methodattributes.public 

|methodattributes.static, returntype, paramtypes);

4344

//獲取乙個 ilgenerator ,用於傳送所需的 il 

45ilgenerator il 

=methodbuilder.getilgenerator();

46for

(intj =

0; j 

<

paramtypes.length; 

++j)

4753

else

5457}58

59//

判斷處理器型別

60if

(intptr.size ==4

)6164else

if(intptr.size ==8

)6568else

6972

73il.emitcalli(opcodes.calli, callingconvention.stdcall, returntype, paramtypes);

74il.emit(opcodes.ret); 

//返回值 

75modulebuilder.createglobalfunctions();

7677

//取得方法資訊 

78methodinfo methodinfo 

=modulebuilder.getmethod(

"invokefun");

7980

return

methodinfo.invoke(

null

, objparams);

//呼叫方法,並返回其值81}

82catch

83finally

8487

}

C盤安裝Windows D盤安裝Linux

一塊硬碟,c盤安裝win7,d盤安裝centos,e盤它用。先安裝win7,然後按以下步驟安裝centos 一 準備工作 3 解壓centos和grub4dos,複製centos解壓目錄下的isolinux資料夾和grub4dos解壓目錄下的grldr grldr.mbr到c盤的根目錄下 4 在c盤...

C 動態呼叫WebService

使用示例 trycatch exception ex 類檔案 using system using system.web using system.xml using system.collections using system.net using system.text using system...

C 動態呼叫wsdl WebService

呼叫 wsdl email位址驗證 web 服務,通過查詢給定的電子郵件域的郵件伺服器和通過向郵件伺服器傳送資料來判斷電子郵件位址正確與否 輸入引數 emailaddress email 位址 預設smtp埠25 返回資料 byte 位元組。返回值 0 請重新驗證 1 郵件位址合法 2 只是網域名稱...