大家好。我沒有大量的C++經驗,但我在其他語言方面有很多經驗。
我想要完成的是創建用於本機C++應用程序的C#庫的包裝。到目前爲止,我所使用的是一個C++/CLI包裝器,它公開了C#庫中的許多函數,以便我可以在我的本機C++應用程序中使用它們。我在喜歡這裏證明什麼辦法這樣做:
http://pragmateek.com/using-c-from-native-c-with-the-help-of-ccli-v2/
問題
我有一個傳遞託管C++/CLI指針C#庫的問題。在C#庫函數看起來是這樣的:
public bool SomeFunction(out byte[] buffer)
對於我有一個很難指針傳遞到這個變量在我的C++/CLI包裝某種原因。該函數正在請求託管引用,但&不適用於託管引用,並且我似乎無法通過使用%來使其工作。
我需要從函數中獲取字節數組,我非常確定我可以將數據編組到我的C++代碼可以處理的類型中。有什麼建議麼?
編輯:刪除了對C++/CLI代碼的不清楚引用。爲了迴應漢斯,我成功地引用了C#庫,因爲我已經能夠將數據從C#庫傳遞到本地C++代碼。另外,我不打算讓這聽起來很神祕。 C#庫適用於我試圖與Micromanager連接的顯微鏡相機。我正在處理的特定功能與抓取圖像緩衝區中的數據有關。
更新
感謝盧卡斯,我有一個解決方案。無論出於什麼原因,我認爲我需要將指針傳遞給C++/CLI庫中的C#庫。我對C++/CLI包裝最終的代碼是:
public: bool SomeFunction(unsigned char* cBuffer, int* count) {
cli::array<unsigned char>^ buffer;
bool isFull = _referenceToManagedCSharpClass->SomeFunction(buffer);
pin_ptr<unsigned char> pinnedArray = &buffer[0];
cBuffer = pinnedArray;
*count = buffer->Length;
return isFull;
}
它仍然不清楚爲什麼我並不需要一個指針傳遞給C#庫,或爲什麼我需要使用pin_ptr指針存儲在cBuffer,但我想我會通過閱讀來解決這個問題。感謝所有幫助過我的人。
*你很不清楚爲什麼你發佈了這個方法的C++/CLI聲明。你不應該自己寫它,因爲它存在於C#庫中。您的C++/CLI項目必須添加對C#庫的引用。 –
我很抱歉不清楚。正如我所說的,我對C++相對來說比較陌生。正如我上面所說,我必須編寫一個接口來將C#庫展示給本機C++(不是C++/CLI)。我發佈了C++/CLI,因爲這是我在SDK中給出的參考點,我認爲這是在C++/CLI中公開此特定C#函數的起點(因爲SDK C++/CLI已經是一個很好的開始指向我已經包含的其他功能)。 – FirstPrime