Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++;动态链接库 我将向C++的DLL添加功能,这将从C接口调用。代码两端都是开放的_C#_C++_Multidimensional Array_Marshalling - Fatal编程技术网

将多维数组从C#传递到C++;动态链接库 我将向C++的DLL添加功能,这将从C接口调用。代码两端都是开放的

将多维数组从C#传递到C++;动态链接库 我将向C++的DLL添加功能,这将从C接口调用。代码两端都是开放的,c#,c++,multidimensional-array,marshalling,C#,C++,Multidimensional Array,Marshalling,我需要将一个简单的固定大小多维数组从接口传递到DLL 例如在C#中: 我在网上做过调查,但没有找到任何符合我的参数的东西。我发现的最多的是二维数组。如果我错过了什么,请不要犹豫,提供一个现有的链接 是否涉及编组?我可以直接传递数组,或者C++中有某种类型的数组指针吗? < p>如果代码两端都打开,那么请查看自动化推荐的SAFAREAR数据类型。p> 您可以在这里找到参考。您可以将数组的IntPtr及其维度发送给cpp函数 byte[, ,] arrayKeys = new byte[3, 2,

我需要将一个简单的固定大小多维数组从接口传递到DLL

例如在C#中:

我在网上做过调查,但没有找到任何符合我的参数的东西。我发现的最多的是二维数组。如果我错过了什么,请不要犹豫,提供一个现有的链接


是否涉及编组?我可以直接传递数组,或者C++中有某种类型的数组指针吗?

< p>如果代码两端都打开,那么请查看自动化推荐的SAFAREAR数据类型。p>
您可以在这里找到参考。

您可以将数组的IntPtr及其维度发送给cpp函数

byte[, ,] arrayKeys = new byte[3, 2, 4] { 
{ {0x01, 0x23, 0x45, 0x55}, {0xCD, 0xEF, 0x12} }, 
{ {0x9A, 0xBC, 0xDE, 0xAA}, {0x78, 0x90, 0xCD} }, 
{ {0x67, 0x89, 0xA0, 0x98}, {0x90, 0x11, 0x22} }};

byte oneDimensionArray = new byte[2*3*4];
for (int i=0; i<2; i++)
{
   for (int j=0; j<3; j++)
   {
      for (int k=0; k<4; k++)
      {
         oneDimensionArray[i*12+j*4+k] = arrayKeys[i,j,k];
      }
   }
}
IntPtr pBytes;
pBytes = Marshal.AllocCoTaskMem(2*3*4/*array dimensions*/);
//Copy data to allocated memory
Marshal.Copy(oneDimensionArray, 0, pBytes, i*j*k);
//Send memory pointer to C++ function
SendArrayToCPP(pBytes, i, j, k);
//free array memory
Marshal.FreeCoTaskMem(pBytes);
byte[,]arrayKeys=新字节[3,2,4]{
{0x01,0x23,0x45,0x55},{0xCD,0xEF,0x12},
{0x9A,0xBC,0xDE,0xAA},{0x78,0x90,0xCD},
{0x67,0x89,0xA0,0x98},{0x90,0x11,0x22}};
字节一维数组=新字节[2*3*4];

对于(int i=0;i哪些参数)C++函数看起来是什么?它不存在。我正在扩展DLL功能,所以它是宽开阔的。我仍然是C语言的新手。在C++中,我会写一些类似的东西。
byte[, ,] arrayKeys = new byte[3, 2, 4] { 
{ {0x01, 0x23, 0x45, 0x55}, {0xCD, 0xEF, 0x12} }, 
{ {0x9A, 0xBC, 0xDE, 0xAA}, {0x78, 0x90, 0xCD} }, 
{ {0x67, 0x89, 0xA0, 0x98}, {0x90, 0x11, 0x22} }};

byte oneDimensionArray = new byte[2*3*4];
for (int i=0; i<2; i++)
{
   for (int j=0; j<3; j++)
   {
      for (int k=0; k<4; k++)
      {
         oneDimensionArray[i*12+j*4+k] = arrayKeys[i,j,k];
      }
   }
}
IntPtr pBytes;
pBytes = Marshal.AllocCoTaskMem(2*3*4/*array dimensions*/);
//Copy data to allocated memory
Marshal.Copy(oneDimensionArray, 0, pBytes, i*j*k);
//Send memory pointer to C++ function
SendArrayToCPP(pBytes, i, j, k);
//free array memory
Marshal.FreeCoTaskMem(pBytes);