我们使用C++ COME 开发组件,会遇到指针等做输入输出参数,但是我们在C#中该如何调用呢,接下来我们来看:
在C++ SDK 的 .idl 文件中,有这个接口
对应的,在生成C#那里之后
就会变成这样,
那么问题来了: 在上面C++中 ,BYTE* pdata 是指向了一块内存空间,
而且该函数的本意是:在C#处开辟一块内存空间,将这个内存空间的地址传给C++ 之后,对这块内存空间进行操作(也就是赋值),
废话不多说,直接上代码
byte[] buf2 = new byte[siCount]; //这里开辟一块内存空间地址
int ktem = 0;
unsafe //在C# 中调用,只能使用不安全指针类型
{
fixed(int *lpPressur = buf) //这里很关键,使用这个符号,是为了强行锁定这块内存空间地址,告诉GC编译器,这快内存我锁定它了,在我的作用域内,你不准对它进行回收...
{
fixed (byte* lpImgData = buf2) //同理
{
App.mylsrSdk2.PressureToImgByData(ref *lpPressur, ref *lpImgData,ref ktem); //这个函数,就是将640压力数据,通过算法,处理为图像数据(这样,就完成了对内存的渲染)
//之后,就可以输出这块内存空间,发现,数据已经得到了
StringBuilder str = new StringBuilder();
for (int i = 0; i < buf.Length; i++)
{
str.Append(buf[i] + " ");
Console.Write("buf[i] ");
if ((i + 1) % 16 == 0){
str.Append("\r\n");
console.WriteLine();
}
}
}