下面介紹c#呼叫c++動態鏈結庫方法。
新增system.runtime.interopservices命名空間
如是com就直接用靜態函式呼叫:
public static int getnum(
int lfileseqno,
string ***ttype,
string ***tnumber,
string sformid,
string soperationdate,
string ssystemregistdate,
out int lcount,
out int lerrortype,
out int lerrorcode)
如不使com是普通的dll
不能直接用
只能在c++中加乙個對外的介面:
extern "c" __declspec(dllexport) woextconregobj* outgetobjconstructor();
extern "c" __declspec(dllexport) void outgetobjdestructor(woextconregobj* outgetobj);
extern "c" __declspec(dllexport) long selectdummyrecord(long *lerrortype,
long *lerrorcode,
woextconregobj* outgetobj);
//
extern "c" __declspec(dllexport) woextconregobj* outgetobjconstructor()
extern "c" __declspec(dllexport) void outgetobjdestructor(woextconregobj* outgetobj)
extern "c" __declspec(dllexport) long selectdummyrecord(long *lerrortype,
long *lerrorcode,
woextconregobj* outgetobj)
就可直接用c#呼叫c++動態鏈結庫了
[dllimport("***.dll", entrypoint="selectdummyrecord", exactspelling=false, callingconvention=callingconvention.cdecl)]
private static extern int selectdummyrecord(out int lerrortype,out int lerrorcode,int outgetobj);
/// < summary>
/// < /summary>
/// < remarks>
/// < /remarks>
/// < param name="lerrortype">< /param>
/// < param name="lerrorcode">< /param>
/// < returns>< /returns>
public int selectdummyrecord(out int lerrortype,out int lerrorcode)
這樣就解決了c#呼叫c++寫的動態鏈結庫的問題。
C 呼叫C 動態鏈結庫dll
在過程中發現兩種方法解決問題 一種是非託管c 建立的dll庫,需要用靜態方法呼叫。這種方法無法在c 的reference中直接引用,而是要用靜態呼叫的方法,其他部落格已經介紹的很詳盡,唯一需要補充的是,c 檔案需要先 usingsystem.runtime.interopservices 之後才可以...
Python呼叫C 動態鏈結庫
1 安裝vs2010,或者以上的版本 2 建立win32應用程式,應用程式型別選擇dll。由於python是64位的,因此需要將win32程式設定為x64,即64位的。3 編寫程式add.cpp 4 編寫標頭檔案add.h。由於 比較少,也可以申明直接放在add.cpp中,此處為了規範,還是分開寫的...
C 生成 呼叫動態鏈結庫
一 需求描述 1 用 生成動態鏈結庫 2 用c 呼叫動態鏈結庫 二 生成動態鏈結庫 1 新建類庫 2 新增welcomeinfo類 如下 僅供測試用,例子很簡單 1 using system 2using system.collections.generic 3using system.linq 4...