【问题标题】:Error in calling unmanaged dll调用非托管dll时出错
【发布时间】:2013-05-23 16:11:01
【问题描述】:

我尝试从库中调用函数以获取有关机器的一些信息。但是我收到异常 SystemLoadException: Type IODBPSD_3 from GetAlmMsg, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 无法读取,第 4 位有一个对象,该对象被错误地舍入或被非对象数组覆盖。你能给个建议吗?不幸的是,我根本不理解 IODBPSD_3 类的逻辑。非常感谢您的帮助。

拉德克

public Focas1.IODBPSD_3 prmData = new Focas1.IODBPSD_3();//my call

....

//机器的FOCAS库附件——不是我的代码

public class Focas1
{
    ...

    public const short MAX_AXIS = 8;

    [StructLayout(LayoutKind.Explicit)]
        public class IODBPSD_3
    {
        [ FieldOffset( 0 )]
        public short   datano ;    /* data number */
        [ FieldOffset( 2 )]
        public short   type ;      /* axis number */
        [ FieldOffset( 4 ),
        MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_AXIS)]
        public byte[] cdatas = new byte[MAX_AXIS];
        [ FieldOffset( 4 ),
        MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_AXIS)]
        public short[] idatas = new short[MAX_AXIS];
        [ FieldOffset( 4 ),
        MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_AXIS)]
        public int[] ldatas = new int[MAX_AXIS];
    }
    ...
}

【问题讨论】:

  • 对不起,我完全不明白。你觉得哪里不对?
  • @GrantThomas:至少在某些时候,你可以(FieldOffset 允许你进行联合)。但是,我不确定数组。

标签: c# dll unmanaged


【解决方案1】:

问题出在编译中。我创建了 32b 处理器,程序正在运行。

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2010-10-18
    • 2011-03-04
    • 2014-08-18
    相关资源
    最近更新 更多