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