C 呼叫C 動態鏈結庫方法介紹

2021-06-21 21:18:07 字數 2040 閱讀 6262

下面介紹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...