Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';t在monotouch中将结构从非托管库封送到托管代码_Ios_Binding_Xamarin.ios_Static Libraries - Fatal编程技术网

Ios Can';t在monotouch中将结构从非托管库封送到托管代码

Ios Can';t在monotouch中将结构从非托管库封送到托管代码,ios,binding,xamarin.ios,static-libraries,Ios,Binding,Xamarin.ios,Static Libraries,我在供应商提供给我们的库的头文件中定义了以下结构 typedef struct { int iLen; int iType; int state; unsigned char data[1200]; } TCardCmdRespond; 我用C#创建了一个我认为与之匹配的结构 [StructLayout(LayoutKind.Sequential)] public struct TCardCmdRespond { public int iLen;

我在供应商提供给我们的库的头文件中定义了以下结构

  typedef struct {
    int iLen;
    int iType;
    int state;
    unsigned char data[1200];
  } TCardCmdRespond;
我用C#创建了一个我认为与之匹配的结构

[StructLayout(LayoutKind.Sequential)]
public struct TCardCmdRespond
{
    public int iLen;
    public int iType;
    public int state;
    public byte[] data;
}
我有几件事要指出。我不确定无符号字符数组应该映射到什么。我最初猜测,无符号字符应该映射到字符,但C#中的字符是Unicode,所以这似乎不起作用。我还尝试将它映射到一个字节。我也不知道长度1200对封送员是否有意义,如果有,如何指定它

在我的monotouch应用程序中,我采用了以下方法,将结构作为参数

    [Export("OnRecvData:")]
    public void OnRecvData(TCardCmdRespond respond)
    {
        ...
    }
该方法由库通过选择器调用。调用该方法时不会出现问题。当我查看结构中包含的数据时,问题就出现了。当我预计数字在1-3之间时,数字非常高(可比较的objective-c代码显示iType在这个范围内)。我曾尝试使用位转换器来反转字节顺序,以防封送处理程序没有为我解决端部问题。数字仍然很高,所以我认为问题不仅仅在于简单的终结

当我试图从char数组中提取数据时,会出现进一步的问题。它不是空的,但尝试以空检查以外的任何方式访问它会导致应用程序使用EXC_BAD_访问(SIGABRT)崩溃

我的解决方案是在objective-c中为此编写一个包装器,将结构分解为参数。然后创建一个库,将其打包并绑定。我的objective-c技能不是那么热门,但这是一个缓慢的过程

有没有一种方法可以让我不必将其封装在objective-c库中就可以完成这项工作?

您的c#定义不正确

C版本包含一个1200字节的数组内联块,而C版本包含一个指向数组(4字节)的指针

你可以看看这个:


@migueldeicaza感谢您的回复。这是我的一个重大疏忽。我会试试看,看能不能解决这个问题。我当然希望它能解决访问问题。你认为这也会修正不正确的整数吗?无论如何,我离解决方案更近了,谢谢你的帮助。