关于在C#中,调用C++ COME组件SDK 中的

时间:2022-05-01 22:07:53

我们使用C++ COME 开发组件,会遇到指针等做输入输出参数,但是我们在C#中该如何调用呢,接下来我们来看:

在C++ SDK 的 .idl 文件中,有这个接口

关于在C#中,调用C++ COME组件SDK 中的

对应的,在生成C#那里之后 

关于在C#中,调用C++ COME组件SDK 中的

就会变成这样,

那么问题来了:  在上面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();

                    }
                }                           

                        }
                    }