首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C++ 函数中参数是结构体,C#怎么传参

2012-09-17 
C++ 函数中参数是结构体,C#如何传参C++函数定义如下:C/C++ codeResult_t hhpReadConfigItem( int cfgType,

C++ 函数中参数是结构体,C#如何传参
C++函数定义如下:

C/C++ code
Result_t hhpReadConfigItem( int cfgType, int item,PVOID pStruct ); typedef struct _tagHHP_VERSION_INFO {        DWORD   dwStructSize;        DWORD   dwMask;        TCHAR   tcAPIRev[ MAX_VERSION_STRING_LEN ];             // SDK API version string        TCHAR   tcFirmwareRev[ MAX_VERSION_STRING_LEN ];        // Imager firmware version } HHP_VERSION_INFO


C++中调用如下:
C/C++ code
HHP_VERSION_INFO version;version.dwStructSize = sizeof(HHP_VERSION_INFO);version.dwMask = SYM_MASK_ALL;//SYM_MASK_ALL = 0xffffffffnResult = hhpReadConfigItem(1, 4, &version);//返回正确


C#这样定义有错吗
C# code
Result_t hhpReadConfigItem(int cfgType, int item, IntPtr pStruct);


C# code
public struct HHP_VERSION_INFO        {            public uint dwMask;            public int dwStructSize;            public string strAPIRev;            public string strBootCodeRev;}

C#中要如何调用?
下面调用错在哪?
 
C# code
HHP_VERSION_INFO version = new HHP_VERSION_INFO();            version.dwStructSize = 1704;            version.dwMask = 4294967295;            IntPtr pStuct =new IntPtr();            pStuct = Marshal.AllocHGlobal(version.dwStructSize);            //Marshal.StructureToPtr(version, pStuct, true);            Result_t result = hhpReadConfigItem(1,4 , pStuct);//返回错误


[解决办法]
定义错了,最少也得加返回值的类型吧?
[解决办法]
你的结构体也要用Marshal规定长度和封装序列,参考
C# code
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]    public struct APSYDDataItem    {        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]        private string _securityID;        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]        private string _ydtype;    } 

热点排行