在C ++ / C#项目中使用blittable类型而不编组?

时间:2017-01-09 06:30:39

标签: c# c++ arrays byte marshalling

我有一个使用C ++和C#的项目。我正试图更好地理解blittable类型。根据我的理解,使用blittable类型意味着在C ++和C#之间传递数据时不必执行任何转换,即您不必使用interop编组程序。我能正确理解吗?

我问,因为我正在尝试将数据从C ++函数传递到C#而不用执行任何转换。我已经能够使用Marshal.Copy将数据恢复得很好,但是我试图弄清楚如何在不使用Marshal.Copy的情况下获取数据。如果一个blittable类型(我使用一个字节),不需要转换,那么这应该是可能的吗?

如果有可能,我该怎么做呢。我的C ++函数返回一个byte *数组作为 void * 类型。

在C#端,我想获取该字节数组并立即保存,无需任何编组,例如

byte[] byteArray = FileAccessClass.GetByteArray();
/* GetByteArray is the C++ function */

以下是我的更多代码:

/* C# FileAccess.cs */
[DllImport("Test.dll")]
public static extern IntPtr getBytes(
    [In] string filePath,
    [In] string dataGroup); 

/* Header .h file. */
TEST_DLL void* getBytes(std::string filePath, std::string dataGroup);

/* Implementation C++ file. */
TEST_DLL void* getBytes(std::string filePath, std::string dataGroup)
{
    printf("getBytes entered."

    /* More code here...*/

    byte* byteArray = new byte[10];
    return byteArray;
}

我当前的实现使用IntPtr,它与编组一起用于转换为int数组。是否有可能消除编组步骤?

0 个答案:

没有答案