标题:C#调用C++dll问题
只看楼主
ghl2312
Rank: 4
等 级:业余侠客
威 望:2
帖 子:208
专家分:226
注 册:2008-7-10
结帖率:100%
 问题点数:0 回复次数:1 
C#调用C++dll问题
C++中的宏、枚举和结构体在C#中应该如何处理。

如:RETURN_CODE WINAPI lvDeviceOpen(BYTE nDevNo);//为C++中的函数原型,RETURN_CODE是一个枚举

如果要在C#中调用这个方法应该如何去做?
搜索更多相关主题的帖子: dll 
2008-10-25 14:55
ghl2312
Rank: 4
等 级:业余侠客
威 望:2
帖 子:208
专家分:226
注 册:2008-7-10
得分:0 
1、结构体的处理
C++中:
typedef struct _DEVICE_LOCATION
{
    ULONG DeviceId;            //Device ID
    ULONG VendorId;            //Vendor ID
    ULONG SubsystemId;        //Subsystem ID
    ULONG RevisionId;        //Revision ID
    CHAR  DeviceCode[16];    //采集卡型号
} DEVICE_LOCATION, *PDEVICE_LOCATION;

UINT WINAPI lvGetDeviceInfo(PDEVICE_LOCATION Device, RETURN_CODE *rc);//RETURN_CODE是一个枚举

转换到C#中:
    [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
    public struct DeviceLocation
    {
        public uint DeviceId;            //Device ID
        public uint VendorId;            //Vendor ID
        public uint SubsystemId;        //Subsystem ID
        public uint RevisionId;        //Revision ID

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string DeviceCode;    //采集卡型号
    }
    这样就可以方便的编出C#的函数原型
        [DllImport("lvpci.dll")]
        public static extern uint lvGetDeviceInfo(ref DeviceLocation Device,ref ReturnCode rc);
2008-10-30 09:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-240497-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.139194 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved