我正在调用C ++中的函数,它返回一个指向struct数组的指针,因为我是这个操作/实现的新手,所以我遇到了问题。
我的C ++代码:
// My C++ Structs
typedef struct _MainData {
double dCount;
DataS1 *DS1;
int iCount1;
DataS2 *DS2;
int iCount2;
}MainData;
typedef struct _DataS1 {
unsigned int uiCount1;
unsigned int uiCount2;
int iCount;
void *pA;
void *pB;
} DataS1;
typedef struct _DataS2 {
unsigned int uiCount1;
unsigned int uiCount2;
unsigned int uiCount3;
unsigned int uiCount4;
double dCount;
int iCount1;
char strLbl[64];
} DataS2;
// My C++ Function
MainData* GetData(const int ID)
{
MainData* mData;
int iLength = Get_Count();
mData = new MainData[iLength];
for(int x = 0;x < VarCounter; x++)
{
// Codes here assign data to mData[x]
}
return mData;
}
问题: 如何将C ++函数GetData调用到C#?
我目前在C#中的代码是:
[DllImport(".\\sdata.dll")]
[return: MarshalAs(UnmanagedType.LPArray)]
private static unsafe extern MainData[] GetData(int ID);
// The struct MainData in my C# side is already "Marshalled"...
//My function call is here:
MainData[] SmpMapData = GetData(ID);
当我编译它时,有一个例外: “无法封送'返回值':托管/非托管类型组合无效。”
抱歉编码不好......请帮忙...
答案 0 :(得分:0)
我尝试做同样的事情,但由于时间不够而没有成功,但我在过程中学到了一些东西:
祝你好运,我无法让它发挥作用。
答案 1 :(得分:-1)
一个问题是编组程序不知道C ++代码返回的数组中有多少项。另一种方法可能是有两个C ++方法 - 一个返回项目数,另一个返回给定索引的单个MainData。
你的结构在C#方面看起来像什么?
由于您正在编写C ++和C#端,因此使用C ++ / CLI来连接它们而不是PInvoke可能更容易。