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

C#调用C++ DLL(构造体中二维数组转换)

2012-08-01 
C#调用C++ DLL(结构体中二维数组转换)想在C# WinForm开发中调用一个采用C++封装好的dll, 但其结构体中的二

C#调用C++ DLL(结构体中二维数组转换)
想在C# WinForm开发中调用一个采用C++封装好的dll, 但其结构体中的二维数组不知道应当如何转换, 网上搜索了一把P/Invoke资料相对来说比较少, 没有找到切实有用的文章, 现在调用虽不会报错了, 但没有产生预期效果.

C/C++ code
#define MAX_STRM_LAYER 3  // 最多几级流媒体//服务器信息typedef struct tagServerInfo{     long uID;                          char csStrMIP[MAX_STRM_LAYER][16];  // 这个不知道如何转换            unsigned short nStrMPort[MAX_STRM_LAYER];       char csDdtIP[16];                  unsigned short nDdtPort;           unsigned short bIsWebUser;         unsigned short protocolType;       const char *pcUserName;            const char *pcPassword;            char csStoreFileSvrIP[16];              unsigned short nStoreFileSvrPort;       char csDevFileSvrIP[16];                unsigned short nDevFileSvrPort;    }TServerInfo, *LPServerInfo;LONG __stdcall StrM_Login(LPServerInfo mts, int iLayer = 1);


C# code
/// <summary>/// 最多几级流媒体/// </summary>public const int MAX_STRM_LAYER = 3;        /// <summary>        /// 服务器信息        /// </summary>        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]        public struct TServerInfo        {            public int uID;            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.LPStr)]            public string[] csStrMIP;            public ushort[] nStrMPort;            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]            public string csDdtIP;            public ushort nDdtPort;            public ushort bIsWebUser;            public ushort protocolType;            public string pcUserName;            public string pcPassword;            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]            public string csStoreFileSvrIP;            public ushort nStoreFileSvrPort;            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]            public string csDevFileSvrIP;             public ushort nDevFileSvrPort;        }        [DllImport("StreamMedia.dll")]        public static extern int StrM_Login(ref TServerInfo mts, int iLayer);



[解决办法]
关 注
[解决办法]
探讨

C++的多维数组,转成C#的一维数组处理

C# code

[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct TServerInfo
{
[MarshalAsAttribute(Unmanag……

[解决办法]
up......
[解决办法]
转换成一维数组处理,注意长度就行。
[解决办法]
好高端啊,先顶后学
[解决办法]

DING YI GE

热点排行