c++导出类 C#调用 代码
时间: 2023-07-30 12:10:23 浏览: 71
C#调用C++导出
以下是一个简单的示例,演示如何在C#中调用C++导出的类及其成员函数:
C++代码:
```
// MyCppClass.h
#pragma once
#ifdef MYCPPLIB_EXPORTS
#define MYCPPLIB_API __declspec(dllexport)
#else
#define MYCPPLIB_API __declspec(dllimport)
#endif
class MYCPPLIB_API MyCppClass {
public:
MyCppClass();
void MyFunction();
private:
int m_data;
};
// MyCppClass.cpp
#include "MyCppClass.h"
MyCppClass::MyCppClass() : m_data(0) {}
void MyCppClass::MyFunction() {
m_data++;
}
```
C#代码:
```
// MyCSharpApp.cs
using System;
using System.Runtime.InteropServices;
class MyCSharpApp {
[DllImport("MyCppLib.dll")]
public static extern IntPtr CreateMyCppClass();
[DllImport("MyCppLib.dll")]
public static extern void DestroyMyCppClass(IntPtr cppInstancePtr);
[DllImport("MyCppLib.dll")]
public static extern void CallMyCppClassFunction(IntPtr cppInstancePtr);
static void Main() {
// 创建C++类的实例
IntPtr cppInstancePtr = CreateMyCppClass();
// 将C++实例指针转换为C#中的对象
MyCppClass cppInstance = (MyCppClass) Marshal.PtrToStructure(cppInstancePtr, typeof(MyCppClass));
// 调用C++类的成员函数
CallMyCppClassFunction(cppInstancePtr);
// 销毁C++类的实例
DestroyMyCppClass(cppInstancePtr);
}
}
```
需要注意的是,C++的类必须是标准布局(standard layout)类型,才能在C#中正确使用。另外,由于C++和C#使用不同的内存管理方式,需要特别小心对象的创建和销毁,以避免内存泄漏和崩溃等问题。以上代码仅供参考,具体实现方式可能因应用场景和需求而有所不同。
阅读全文