我有一个使用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数组。是否有可能消除编组步骤?