Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;将包含字符串成员的结构数组返回给c# < >我需要从WinCE 7中的C++ DLL中返回结构数组到C ^。_C#_C++_Dll_Struct_Dllimport - Fatal编程技术网

C++;将包含字符串成员的结构数组返回给c# < >我需要从WinCE 7中的C++ DLL中返回结构数组到C ^。

C++;将包含字符串成员的结构数组返回给c# < >我需要从WinCE 7中的C++ DLL中返回结构数组到C ^。,c#,c++,dll,struct,dllimport,C#,C++,Dll,Struct,Dllimport,C++代码 struct AvailableNetworkList { char strProfileName[7]; ULONG WLanSignalQuality; }; BOOL GetAvailableNetworkLists(OUT AvailableNetworkList** data,OUT int *length) { AvailableNetworkList availableNetwork; AvailableNetworkList *a

C++代码

struct AvailableNetworkList
{
   char strProfileName[7];
   ULONG WLanSignalQuality;
};

BOOL GetAvailableNetworkLists(OUT AvailableNetworkList** data,OUT int *length)
{
      AvailableNetworkList availableNetwork;
      AvailableNetworkList *availableNetworkList = new AvailableNetworkList[pList->dwNumberOfItems];

      for(DWORD i=0;i<pList->dwNumberOfItems;i++)
      {
         availableNetwork.WLanSignalQuality=pList->Network[i].wlanSignalQuality;
         availableNetwork.strProfileName[0] = 'a';
         availableNetwork.strProfileName[1] = 'b';
         availableNetwork.strProfileName[2] = 'c';
         availableNetwork.strProfileName[3] = 'd';
         availableNetwork.strProfileName[4] = 'e';
         availableNetwork.strProfileName[5] = 'f';
         availableNetwork.strProfileName[6] = 'g';
         availableNetworkList[i] = availableNetwork;

      }
      *length=pList->dwNumberOfItems;
      *data = availableNetworkList;
      return true;
};
调用api并用c#结构同步数据的代码

            IntPtr resultPtr = IntPtr.Zero;
            int size = 0;
            bool result2 = GetAvailableNetworkLists(out resultPtr, out size);

            var dataEntrySize = Marshal.SizeOf(typeof(AvailableNetworkList));
            var availableNetworkList = new AvailableNetworkList[size];
            for (var i = 0; i < size; i++)
            {
                var cur = (AvailableNetworkList)Marshal.PtrToStructure(resultPtr, typeof(AvailableNetworkList));
                availableNetworkList[i] = cur;
                resultPtr = new IntPtr(resultPtr.ToInt32() + dataEntrySize);
            }
IntPtr resultPtr=IntPtr.Zero;
int size=0;
bool result2=getAvailableNet工作列表(out resultPtr,out size);
var dataEntrySize=Marshal.SizeOf(typeof(AvailableNetworkList));
var availableNetworkList=新的availableNetworkList[size];
对于(变量i=0;i

这里所有的东西都很好,只有问题是String中的String值(StrPrLeLeNEnm)被设置为C++中的“ABCDEFG”,当到C时,该值不是如下面的图像所示的可读格式,其他整数值是正确的。


任何帮助都将不胜感激。请提前感谢。

您的字符串和信号质量结构成员位置在C#array中颠倒。CharSet.Unicode与本机代码中使用的
char
不匹配。您还有内存泄漏,无法调用
delete
我可以知道使用struct@Ron我重新安排了位置。还是没有luck@Hans我在一个线程中看到的Passant应该是CharSet.Ansi而不是Unicode,但是compact框架根本不支持Ansi。
            IntPtr resultPtr = IntPtr.Zero;
            int size = 0;
            bool result2 = GetAvailableNetworkLists(out resultPtr, out size);

            var dataEntrySize = Marshal.SizeOf(typeof(AvailableNetworkList));
            var availableNetworkList = new AvailableNetworkList[size];
            for (var i = 0; i < size; i++)
            {
                var cur = (AvailableNetworkList)Marshal.PtrToStructure(resultPtr, typeof(AvailableNetworkList));
                availableNetworkList[i] = cur;
                resultPtr = new IntPtr(resultPtr.ToInt32() + dataEntrySize);
            }