/*
* 以下演示的是c#代码调用c++ DLL 的方式。
* 该演示为原创,绝非搬砖。解决了c# 调用 C++ Dll获取相关信息之如何传递结构体数组的问题。
*/
//======================================c++ code==================================
#ifndef __SDK__
#define __SDK__
#ifdef SDK_EXPORTS
#define SDK_API __declspec(dllexport)
#else
#define SDK_API __declspec(dllimport)
#endif
extern "C"
{
struct DEVICE_INFO
{
int online;
char id[100];
char attr[100];
};
namespace SDK{
SDK_API void __cdecl GetDeviceIdList(DEVICE_INFO* infos,int& count);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//=====================================C# code======================================
//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows;
using System.Drawing;
//定义对应结构体,注意对应的成员类型
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct DEVICE_INFO
{
public int online;
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public byte[] id;
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public byte[] attr;
}
namespace demo_csharp
{