一、需求描述
(1)用**生成動態鏈結庫
(2)用c#**呼叫動態鏈結庫
二、生成動態鏈結庫
(1)新建類庫
(2)新增welcomeinfo類
**如下(僅供測試用,例子很簡單):
1(3)生成dll動態鏈結庫using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
generatedll816
}17 }
生成的dll在這裡啦
二、c#呼叫dll
(1)新建乙個控制台程式
(2)方法一
1 assembly assembly = assembly.loadfile("(3)方法二e:/haostudy/generatedll/generatedll/bin/debug/generatedll.dll");
23//獲取型別,引數(命名空間+類)
4 type type = assembly.gettype("
generatedll.welcomeinfo");
56//建立該物件的例項,object型別,引數(命名空間+類)
7object instance = assembly.createinstance("
generatedll.welcomeinfo");
89//設定方法中的引數型別,type型別;如有多個引數可以追加多個
10 type params_type = new type[1
];11 params_type[0] = type.gettype("
system.string");
12//
設定方法中的引數值;如有多個引數可以追加多個
13 object params_obj = new object[1
];14 params_obj[0] = "
lucy";
1516
//執行showmsg方法
17string str = type.getmethod("
showmsg
", params_type).invoke(instance, params_obj).tostring();
18console.writeline(str);
19 console.read();
1 assembly assembly = assembly.loadfile("說明:兩個方法大同小異,只是個別寫法不一樣,我個人更喜歡用第一種方法,感覺思路更清晰。e:/haostudy/generatedll/generatedll/bin/debug/generatedll.dll");
2//獲取型別,引數(命名空間 + 類)
3 type typedbhelpher = assembly.gettype("
generatedll.welcomeinfo");
4object odbhelper =activator.createinstance(typedbhelpher);5//
需要呼叫的方法名
6 methodinfo method = typedbhelpher.getmethod("
showmsg");
7//引數集合
8object v = method.invoke(odbhelper, new
object );
9string str =v.tostring();
10console.writeline(str);
11 console.read();
(3)效果
三、呼叫dll一次之後,就不能進行呼叫了,提示dll被占用的解決方案
1疑問:之前是在同乙個頁面既生成dll,又呼叫dll,就會出現「被占用」的錯誤,而且也無法多次呼叫同一dll。這次呼叫多次,也沒有出現這個錯誤,不知是什麼原因,有時間還得再實驗下。//assembly assembly = assembly.loadfile("e:/haostudy/generatedll/generatedll/bin/debug/generatedll.dll");2//
此處改成這種方式即可
3byte bytedll = system.io.file.readallbytes("
e:/haostudy/generatedll/generatedll/bin/debug/generatedll.dll");
4 assembly assembly =assembly.load(bytedll);5//
獲取型別,引數(命名空間+類)
6 type type = assembly.gettype("
generatedll.welcomeinfo");
78//建立該物件的例項,object型別,引數(命名空間+類)
9object instance = assembly.createinstance("
generatedll.welcomeinfo");
1011
//設定方法中的引數型別,type型別;如有多個引數可以追加多個
12 type params_type = new type[1
];13 params_type[0] = type.gettype("
system.string");
14//
設定方法中的引數值;如有多個引數可以追加多個
15 object params_obj = new object[1
];16 params_obj[0] = "
lucy";
1718
//執行showmsg方法
19string str = type.getmethod("
showmsg
", params_type).invoke(instance, params_obj).tostring();
20console.writeline(str);
21 console.read();
so動態鏈結庫生成 呼叫
linux下檔案的型別是不依賴於其字尾名的,但一般來講 o,是目標檔案,相當於windows中的.obj檔案 so 為共享庫,是shared object,用於動態連線的,和dll差不多 a為靜態庫,是好多個.o合在一起,用於靜態連線 1 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡...
生成動態鏈結庫
fpic pic就是position independent code pic使.so檔案的 段變為真正意義上的共享 如果不加 fpic,則載入.so檔案的 段時,段引用的資料物件需要重定位,重定位會修改 段的內容,這就造成每個使用這個.so檔案 段的程序在核心裡都會生成這個.so檔案 段的copy...
MFC 動態鏈結庫的生成呼叫。
1.新建mfc dll程式。2.在專案中新增.cpp檔案 名字隨意。我的是txt 在txt.cpp中寫入 extern c declspec dllexport void button1 void 3.右擊txt.cpp點編譯,編譯成功就行。4.在自己的dll專案debug資料夾中找到txtdll....