C#调用C++DLL的时候,参数中有结构体指针,在C#中该如何调用
DLL中的结构体定义:structtestStruct{intq;};structtestStructArray{testStructqArray[20];};函数定义:...
DLL中的结构体定义:
struct testStruct
{
int q;
};
struct testStructArray
{
testStruct qArray[20];
};
函数定义:
extern"C" DATAINTERFACEX86_API __int32 changeInt(testStructArray *autotask)
{
autotask->qArray[0].q+=1;
return 1;
}
C#中的结构体定义:
[StructLayoutAttribute(LayoutKind.Auto, CharSet = CharSet.Auto)]
public struct testStruct
{
public int q;
}
[StructLayoutAttribute(LayoutKind.Auto, CharSet = CharSet.Auto)]
public struct testStruct1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public testStruct[] qArray;
}
对DLL的调用:
[DllImport("G:\\programingfile\\Debug\\DataInterfaceX86.dll", EntryPoint = "changeInt")]
public static extern Int32 changeInt(ref testStruct1 autoTask);
testStruct1 test = new testStruct1();
test.qArray = new testStruct[20];
函数调用:
changeInt(ref test);//这个地方提示参数不是托管/非托管类型
我觉得是 testStruct1中数组的问题,之前changeInt的参数类型是testStruct指针,这样写完全没问题,程序也能得出正确结构。但是为什么添加了数组后就不行了呢。。
上面的testStruct1和testStructArray指的是一样的结构体。。。 展开
struct testStruct
{
int q;
};
struct testStructArray
{
testStruct qArray[20];
};
函数定义:
extern"C" DATAINTERFACEX86_API __int32 changeInt(testStructArray *autotask)
{
autotask->qArray[0].q+=1;
return 1;
}
C#中的结构体定义:
[StructLayoutAttribute(LayoutKind.Auto, CharSet = CharSet.Auto)]
public struct testStruct
{
public int q;
}
[StructLayoutAttribute(LayoutKind.Auto, CharSet = CharSet.Auto)]
public struct testStruct1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public testStruct[] qArray;
}
对DLL的调用:
[DllImport("G:\\programingfile\\Debug\\DataInterfaceX86.dll", EntryPoint = "changeInt")]
public static extern Int32 changeInt(ref testStruct1 autoTask);
testStruct1 test = new testStruct1();
test.qArray = new testStruct[20];
函数调用:
changeInt(ref test);//这个地方提示参数不是托管/非托管类型
我觉得是 testStruct1中数组的问题,之前changeInt的参数类型是testStruct指针,这样写完全没问题,程序也能得出正确结构。但是为什么添加了数组后就不行了呢。。
上面的testStruct1和testStructArray指的是一样的结构体。。。 展开
1个回答
展开全部
具体我也不太清楚.如果下述方法没有解决请尝试把C++DLL发给我..我看看..
不要嵌套对象,尝试Int[] 试试,如果int数组通过,则考虑嵌套性的转换问题
不要嵌套对象,尝试Int[] 试试,如果int数组通过,则考虑嵌套性的转换问题
追问
把结构体数组换成int数组也是会报错。。
已发您Q**************************************邮*********************************************
箱,方便的话帮着看下代码,十分感谢!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询