将多维数组从C#传递到C++;动态链接库 我将向C++的DLL添加功能,这将从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,
是否涉及编组?我可以直接传递数组,或者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);