嵌入式mono的c 呼叫c 示例

2021-10-24 09:16:09 字數 2106 閱讀 8975

一、支援

通過mono, c++呼叫c#的可以傳入的引數型別支援型別有:

1、基本資料型別(bool float double enum...)

2、引用型別

3、結構體型別

4、類物件

5、陣列

6、指標陣列

7、字串

二、示例

下面**演示,各種型別呼叫的方法:

mian.cpp和test_case.h在c++工程中

testsharp.cs在c#dll中

main.cpp

#include #include #include #include #include #include "testcase.h"

monodomain* domain;

int main()

test_case.h

#pragma once

#include #include #include #include #include #include #include struct struct_test

;class class_test

;struct struct_test1

;void testcase1(monoobject *mono_object)

}// 基礎引數型別呼叫

void testcase2(monoobject* mono_object)

}void testcase3(monoobject* mono_object)

}// 陣列

void testcase4(monoobject* mono_object, monoimage *image)

monomethod* mono_method = mono_class_get_method_from_name(mono_class, "testarrayparameter", 1);

void* p[1];

p[0] = mono_array;

if (mono_method != nullptr)

}// 物件引數

void testcase5(monoobject* mono_object, monoimage* image)

}void testcase6(monoobject* mono_object)

}

testsharp.cs

using system;

using system.collections.generic;

using system.text;

namespace monodll

public struct struct_test1

public class class_test

public class testcsharp

// 基礎引數型別呼叫

public void testbasetypeparameter( bool e, float f, double d, int i)

", e, f, d, i);

}// 基礎引數引用呼叫

public void testbasetyperefparameter(ref bool e, ref float f, ref double d, ref int i)

", e, f, d, i);

}// 陣列

public void testarrayparameter(struct_test ss)

", i);

console.writeline("arrayparameter ", s.f, s.d, s.s);}}

// 物件引數

public void testclassparameter(class_test c)

", c.f, c.d, c.s);

}// 傳入位址的陣列

unsafe public void testpointparameter(intptr ptr, int count)

", p1[i].d, p1[i].f);}}

}}

嵌入式C學習

靜態變數與靜態函式 extern變數 關鍵字const和巨集定義define 程式中所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算就是直接對整數在記憶體中的二進位制位進行操作。常見的位運算有 and運算 or運算 xor運算 not運算 shl運算 和shr運算 and運算通常用於二進位制...

嵌入式C學習

位域函式指標 定義方式 結構體做函式引數傳遞有三種方式 1 用結構體的單個成員作為函式引數,向函式傳遞結構體的單個成員 屬於傳值呼叫,不會影響相應的實參結構體的值 分為值傳遞和位址傳遞。2 用結構體變數做函式引數,向函式傳遞結構體完整結構 屬於傳值呼叫,不會影響相應的實參結構體的值 屬於位址傳遞。3...

嵌入式C開發

將n左移m位 int byte to left move int n int m if n 1 if n 1 return ret 將n右移m位 int byte to right move int n int m if n 1 if n 1 ret n return ret 閒著無聊,自己寫了兩個...