xamarin的.ios binding objective-c union |编组自定义类型
本文关键字:自定义 类型 union ios binding objective-c xamarin | 更新日期: 2023-09-27 18:17:14
大家好!在为Objective-C框架创建绑定项目时,我遇到了一个问题。我在Objective-C中有以下结构定义:
typedef struct {
SCIDataType type;
union {
char charData;
short int16Data;
int int32Data;
};
} SCIGenericType;
下面是我的Structs.cs文件中的c#代码:
[StructLayout(LayoutKind.Sequential)]
public struct SCIGenericType
{
public SCIDataType type;
[StructLayout(LayoutKind.Explicit)]
public struct Data
{
public sbyte charData;
public short int16Data;
public int int32Data;
}
public Data data;
}
问题是,当我使用生成的。dll(从我的绑定项目)在测试单页ios应用程序,我收到以下错误
系统。AggregateException:发生了一个或多个错误。——> ObjCRuntime。RuntimeException:注册商无法封送参数"x"的参数类型"SCIGenericType"
我想,我在c#代码中犯了一个错误。我找到了这个关于绑定结构的文档页面https://developer.xamarin.com/api/type/System.Runtime.InteropServices.StructLayoutAttribute/但是我没有找到绑定联合的正确方法(我在Objective C结构定义中有)。有人能帮我吗?我应该使用FiledOffset属性,如果是,那么如何使用?
变化:
void AddFunction(SCIGenericType data)
:
void AddFunction(IntPtr data)
Xamarin.iOS
有一个固定的类型列表,它将封送,并且不提供自定义封送。
IntPr
将被封送到Obj-C作为指向你的结构的指针…
这当然是不安全的c#代码,所以如果你的结构没有正确定义,Obj-C将在你的托管结构之外读取/写入内存。