由於歷史原因,很多時候我們的**並不完全是使用.net寫成的。這時候和以往c++**的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。
要在c#**中呼叫c++函式,大體的思路是這樣的:首先將c++函式寫成dll形式的庫,然後在c#中匯入dll中的函式進行呼叫。具體的**類似這樣:
c++**:
1c#**:int staticelementnumber = 10;
2extern"c
" afx_api_export int getarrayelementnumber()
3
(匯入函式部分,寫在呼叫函式所在類中)
1extern"c
" afx_api_export hbitmap getabitmap(wchar *strfilename)
2
1c#**: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++**:
1c#**: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
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 ...