调用非托管dll时出错

时间:2013-05-28 15:47:50

标签: c# dll unmanaged

我尝试从库中调用函数来获取有关机器的一些信息。但是我得到一个异常SystemLoadException:从GetAlmMsg输入IODBPSD_3,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null无法读取,第4个位置有一个对象,它被错误地舍入或被unobject数组覆盖。你能告诉我该做什么吗?不幸的是,我根本不理解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];
    }
    ...
}

1 个答案:

答案 0 :(得分:1)

问题在于汇编。我创建了32b处理器,该程序现在正在运行。