调用的是C++编写的com组件中的函数
原型为:HRESULT TEST([out]int **buffer);//buffer是一个指向int数组的指针
内部实现为:
*buffer[0] = 1;
*buffer[1] = 2;在C++中使用:
int *buffer = new int[10];
TEST(&buffer); //即可得到结果在C#中引用COM组件后函数变为TEST(intptr buffer);问:
1:如何写代码接受这个数组呢?
2:若申请内存是在COM组件中,那么在C#中如何释放的呢?注:
一个问题50分!
原型为:HRESULT TEST([out]int **buffer);//buffer是一个指向int数组的指针
内部实现为:
*buffer[0] = 1;
*buffer[1] = 2;在C++中使用:
int *buffer = new int[10];
TEST(&buffer); //即可得到结果在C#中引用COM组件后函数变为TEST(intptr buffer);问:
1:如何写代码接受这个数组呢?
2:若申请内存是在COM组件中,那么在C#中如何释放的呢?注:
一个问题50分!
函数可以声明为
TEST(int[] buffer);
因为在.net中数组是引用类型,其实质也是一个指针
2.没法释放,也不用释放。
HRESUT TEST(int **buffer)
{
*buffer[0] = 100;
return S_OK;
}在.net下的C#引用COM组件后函数原型变为TEST(intptr buffer);
我是想在C#中取得buffer中的数据 如100.
char* string
传出的char* StringBuilder
short short
char byte
char[n] fixed byte[n]
结构指针 结构指针
函数指针 委托
结构体数组使用IntPtr
http://topic.csdn.net/u/20090225/15/a6bc50ad-9721-4749-b189-dc4a4bc045a1.html
TESTLib.TestiClass otest = new TESTLib.TestiClass();
IntPtr intptr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(40);
otest.test(intptr);他会报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。