zoukankan      html  css  js  c++  java
  • VS2010导入DLL的总结

    1. 添加using System.Runtime.InteropServices;

    2. 在C++中的HANDLE被C#中的IntPtr代替

    3. 下一段代码中:

    [DllImport("XXX.dll", EntryPoint = "OpenPort")]
    public static extern int openPort(String name, String baudrate);

    EntryPoint = "OpenPort"指明在原DLL中函数的名称,openPort为重声明后的函数名称

    4. C++中的指针对应C#中的ref前缀,如:

    [DllImport("XXX.dll", EntryPoint = "Receive")]
    public static extern int receive(int device, ref OGeneralInfoOutputPackageType pGeneralInfoOutputPkg);

    5. 结构体的重声明:

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public struct OGeneralInfoOutputType
    {
        public ushort SrcAddr;
        public ushort TargetAddr;
        public ushort Cmd;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public Byte[] uidArr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public Byte[] dataArr;
    };
    
    
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct OGeneralInfoOutputPackageType { public ushort cmdSum; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public OGeneralInfoOutputType[] cmdArr; // 最多可以接收256个帧 };

     6. MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
    MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。当 MarshalAsAttribute.Value 设置为 ByValArray
    时,必须设置 SizeConst 以指示数组中的元素数。当需要区分字符串类型时,ArraySubType 字段可以选择包含数组
    元素的 UnmanagedType。此 UnmanagedType 只可用于作为结构中的字段的数组。而SizeConst则是指数组中的元素个
    数。这是一个历史问题,因为C#的数据和C++的数据布局方式有很大的不同,然而如果在P/Invoke和COM Interop当中,
    又必须要在C#和C++之间传递数据,有的时候,CLR或者说.NET能够自动在两种编程语言之间转换数据,有的时候又不行,
    这时候就需要程序员来帮忙告诉.NET怎样转换数据了。

  • 相关阅读:
    powerdesigner 设置自动增长列(identity)和默认值
    Powercenter体系结构和主要组件介绍
    Asp.net和C# 函数方法 (2)【转载】
    .NET和C# 函数方法(一)
    sql 删除数据库的时候注意
    使用PowerDesigner建立数据库模型【转】
    c#获取当前日期时间
    在windows平台安装Informatica PowerCenter【转载】
    Informatica Powercenter 介绍
    3、对变量在栈上存储顺序,及函数返回值与参数在栈上存放顺序的思考(1)
  • 原文地址:https://www.cnblogs.com/jayhust/p/3475219.html
Copyright © 2011-2022 走看看