C 和C 混合程式設計

2021-07-24 21:26:20 字數 1697 閱讀 1282

由於歷史原因,很多時候我們的**並不完全是使用.net寫成的。這時候和以往c++**的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。

要在c#**中呼叫c++函式,大體的思路是這樣的:首先將c++函式寫成dll形式的庫,然後在c#中匯入dll中的函式進行呼叫。具體的**類似這樣:

c++**:

1

int staticelementnumber = 10;

2extern"c

" afx_api_export int getarrayelementnumber()

3

c#**:

(匯入函式部分,寫在呼叫函式所在類中)

1

extern"c

" afx_api_export hbitmap getabitmap(wchar *strfilename)

2

1

int staticelementnumber = 10;

2extern"c

" afx_api_export bool getarray(int elementnumber, double *baseaddress)

3 8

9for (int i = 0; i < staticelementnumber; ++i)

10

1314

return

true;

15 }

1617

extern"c

" afx_api_export int getarrayelementnumber()

18

c#**:  

傳遞定長陣列很簡單,此處不述。下面的**實現變長陣列的傳遞:

c++**:

1

int staticelementnumber = 10;

2extern"c

" afx_api_export bool getarray(int elementnumber, double *baseaddress)

3 8

9for (int i = 0; i < staticelementnumber; ++i)

10

1314

return

true;

15 }

1617

extern"c

" afx_api_export int getarrayelementnumber()

18

c#**:  

1 [dllimport("

mfcdll.dll

")]2

public

static

extern

bool getarray(int elementnumber, [marshalas(unmanagedtype.lparray, sizeparamindex = 0)] double baseaddress);34

private

void menuitemfilegetarrayonclicked(object sender, routedeventargs e)

5 18 maingrid.children.add(listbox);

19 }

20

C 和C 混合程式設計

由於歷史原因,很多時候我們的 並不完全是使用.net寫成的。這時候和以往c 的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。要在c 中呼叫c 函式,大體的思路是這樣的 首先將c 函式寫成dll形式的庫,然後在c 中匯入dll中的函式進行呼叫。具體的 類似這樣 c 1int ...

C和C 混合程式設計

1 pragma once 關於 pragma once vc 及g 都支援,大膽的用吧。匯出型別必須一致.要麼是c的,要麼是c 2.cplusplus 這個是必須的 ifdef cplusplus extern c endif c 中呼叫c的 1 對於 c 中非類的成員函式,可以簡單的在函式宣告前...

C和C 混合程式設計

如何用c語言封裝 c 的類,在 c裡面使用 stm32 c與c 混合開發 在嵌入式領域,c和c 混合程式設計還是很常見的 一 c 呼叫c的函式 這個很簡單,把c檔案對應的 件,全部用extern c 包起來就是了 ifdef cplusplus extern c endif二 c呼叫c 的函式 1 ...