C 呼叫C 的類

2021-06-07 05:19:55 字數 1338 閱讀 2149

這裡講c#呼叫c++的類,也是我真正想要的做的。網上關於這方面的知識挺雜,我折騰了好久終於搞定了。

大致有兩種方法。第一種c#直接調,用到system.runtime.interopservices中的marshal類,貌似這樣可能通過直接操縱記憶體來實現呼叫,但我沒有嘗試;第二種方法是用managed c++包裝native c++,然後供c#呼叫。這裡詳細講一下這種方法,並基本考慮到了所有的情況。

//na不是c#呼叫物件,nb是,但nb中用到了na類

class __declspec( dllexport ) na //有人提醒我__declspec( dllexport )可以加在方法前面,//但不要加在類前面,否則會出現問題.但我去掉後編譯就出錯了。

; //nb基本已經涵蓋了所有的情況

class __declspec( dllexport ) nb

;

用managed c++包裝。在vs2008中建工程時選clr class library即可。新增對上面生成的nativecpp.dll的引用。這裡我的引用採用了c#的add reference的形式,而不是傳統c++在linker中新增.lib的方式。

#include "nativecpp.h"

using namespace system;

namespace managecpp

~ma()

na geta()

};public ref class mb

~mb()

bool mboo( system::string ^a, array^b, int count) //陣列的包裝,//這裡'^'的含義我不太明白,這裡a, b都是指標

ap[nlength] = 0;

//array轉成ma

ma *newb = new ma[count];

for( int i = 0; i < count; i++)

bool rel = bptr->nbfoo(ap, newb);

delete aarr;

delete newb;

return rel;}};

}

剩下的是c#呼叫的**。首先要新增對managecpp.dll的引用,另外要將nativecpp.dll拷貝到bin目錄下(無法理解)。

namespace cscallcpp

}}

我主要糾結的是在native c++中定義的型別的陣列如何包裝的問題,最後採用的方法比較挫,又建立了乙個陣列,然後賦值,這在空間、效率上都不咋的。請高人賜教。

C 呼叫類的例子

例項說明 本例項演示如何在asp.net程式中呼叫c 物件中的方法。開發要點 本例項通過新增引用c 類庫新增到了asp.net的專案中,然後再asp.net的 中就可以建立c 類庫中類的例項,並呼叫這個類所包含的所有方法了。步驟 2.單擊右面的 選項,切換到 解決方案資源管理器 面板,用滑鼠右健單擊...

C 呼叫C 類庫2

前文 為了測試c 呼叫的c 類庫需要呼叫其他c 類庫的情況 也不知道是不是應該這樣形容,如下圖,目的是呼叫cameracontrol.devices,但是其需要呼叫下面兩個庫 對前乙個專案進行一些修改 1.解決方案 新增 新建專案 類庫 net framework 新增csharptestdll2 ...

使用C 呼叫C 類庫

1.使用c 編寫乙個動態庫 dll 2.將dll內函式匯出 3.使用c 進行呼叫 4.方法呼叫 5.在vs進行除錯 1.1建立專案 x64 在vs2017中新建 專案 visual c windows桌面 動態鏈結庫 在專案屬性中 常規中選擇無公共語言支援,即不建立託管c 類庫 1.2新增類和方法 ...