正在尝试从C++Dll访问C#中的字节数组
Attempting to access byte array in C# from C++ Dll
所以我试图从C++DLL中推送一个未签名的char数组,并希望在C#GUI中访问它。我把C#设置为IntPtr,我正在尝试Marshal。复制字节数组,但IntPtr始终为NULL,真是大错特错!
如有任何帮助,我们将不胜感激。
以下是代码:
C++DLL标头的一部分
class TEST_API TestClass
{
public:
TestClass(void);
~TestClass(void);
void GetData( unsigned char * testData, unsigned size );
unsigned char testInfo[4096];
};
#ifdef __cplusplus
extern "C" {
#endif
extern TEST_API TestClass* CreateTestClass();
extern TEST_API void DisposeTestClass(TestClass* pObject);
extern TEST_API void TestGetData( TestClass* pObject, unsigned char * testData );
#ifdef __cplusplus
}
#endif
这是C++DLL的部分,它的代码太多了,无法将整个东西放入
extern "C" TEST_API void TestGetData( TestClass* pObject, unsigned char * image )
{
if(pObject != NULL)
pObject->GetData( image );
}
void TestClass::GetData( unsigned char * testData )
{
for ( int i=0; i < 64; i++ )
for ( int j=0; j < 64; j++ )
testInfo[j + i*64] = j;
testData = testInfo;
}
我做的C#代码如下:
IntPtr trial = new IntPtr();
testing.RetrieveTestData(trial, 64, 64);
byte[] managedArray = new byte[64*64];
Marshal.Copy(trial, managedArray, 0, 64*64);
for (int i = 0; i < 64; i++)
for (int j = 0; j < 64; j++)
Console.WriteLine(managedArray[j + i * 64]);
基本上,每次的试用IntPtr都是0
我希望有人能帮助我度过难关。感谢
trial作为输入参数传递给RetrieveTestData,这意味着调用者不能更改它。要由调用方更改,参数必须是ref或out
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 基于字节数组生成静态范围整数值
- 将字节数组转换为带有字节序问题的指针
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 swig 追加到字节数组
- C++ 替换字节数组中项的顺序
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 如何通过libpq c api插入字节的数组
- i2c中的字节指针数组
- 以 C++ 为单位递增 16 字节字符数组
- new[] 一个包含构造函数的字节对象数组没有错,对吧?
- 创建未知长度的字节/字符数组
- 我如何将bitset转换为字节/uint8数组
- C++ <--> C# 修改字节编组数组
- 将m个字节的数组拆分为n个字节的块
- c++到c#:有3个元素的字节指针数组等于什么?