yutongiov 2020-10-19 11:06 采纳率: 0%
浏览 303

C#结构体数据嵌套结构体数据如何托管

临时学习C#接替离职同事工作,对C#深层次点的东西就不无法解决,现在需要
使用托管方式定义C#结构体,结构体数组嵌套结构体数组如下:
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequentiali)]
public struct test_info_t
{
unsigned short u16Ida;
unsigned short u16Idb;
};

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequentiali)]
public struct struct_cfg_t
{
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst =

16, ArraySubType = System.Runtime.InteropServices.UnmanagedType.Struct)]
public test_info_t[] stuTestInfo[16];
};

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequentiali)]
public struct test_t
{
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst

= 4, ArraySubType = System.Runtime.InteropServices.UnmanagedType.Struct)]
public intersection_cfg_t[] stucfg];
};

运行时出现错误:
“System.TypeLoadException”类型的未经处理的异常在 mscorlib.dll 中发生

其他信息: 未能从程序集“iCardSetupTool, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“iCardSetupTool.FormMain”。

请问各位大神怎么解决?

  • 写回答

1条回答 默认 最新

  • hxycsdn9159 2020-10-19 14:23
    关注

    1.首先明确一点:在C#里面除了用”unsafe“关键字修饰的方法外,其他的都是托管代码,这些结构体和普通的结构体并没有什么区别,唯一的区别是加上了一些Attribute,而这些Attribute的作用也是告诉编译器在用这些结构体和Native代码交互时候封送方式以及这些结构体在内存中的布局方式。
    2.你的错误应该和这些结构体没什么关系,最大的可能是”iCardSetupTool.FormMain“这个类找不到,首先看看”iCardSetupTool“这个命名空间来自于你引用的哪个dll,如果找到了这个dll也确认有”FormMain“这个类的话再看看这个类的构造函数是否报错,另外看看你运行的时候使用的是x86还是x64,然后检查一下你引用的这个dll是32位的还是64位的,因为x86是运行不了64位的代码的。

    评论

报告相同问题?

悬赏问题

  • ¥15 链接问题 C++LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接