当前位置:编程学习 > C#/ASP.NET >>

关于C#调用C++编写的DLL遇到的问题

C++编写的DLL中的含有2个数据结构:如下
typedef struct  {
    char OpType[2];            //操作类型
    char TrType[2];            //交易类型
    char Reserved[48];                //预留字段
}strUp;
typedef struct  {
    char OpType[2];        //操作类型
    char TrType[2];        //交易类型
    char Reserved[48];            //预留字段
}strDown;



动态库为 myDll.Dll
接口函数为 myMethod(int i,char * strUp,char * strDown)
调用函数时,要为strUp赋值

请问在C#中应该如何调用?请大侠指点 --------------------编程问答-------------------- 1. 把结构体定义转换

[StructLayout(LayoutKind.Sequential, Pack = 1)] // 这里按照你原来代码的方式写
    public struct strUp
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        byte OpType[2];            //操作类型
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        byte TrType[2];            //交易类型
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        byte Reserved[48]; 
    }

[StructLayout(LayoutKind.Sequential, Pack = 1)] // 这里按照你原来代码的方式写
    public struct strDown
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        byte OpType[2];            //操作类型
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        byte TrType[2];            //交易类型
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        byte Reserved[48]; 
    }


2. 声明dll中的函数
[DllImport("myDll.dll", EntryPoint = "myMethod")]
private static extern EnumMessageType myMethod (int i, out strUp, out strDown);

试试行不行吧 --------------------编程问答-------------------- 上面SizeConst = 2有两处写错了,应该是SizeConst = 48
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,