關於在C#中,調用C++ COME組件SDK 中的

我們使用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();

                    }
                }                           

                        }
                    }


                    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章