我有一個庫,其功能我想最終暴露給.NET。我要揭露的方法具有以下特徵:爲.NET消費定義此本機界面的最佳方式是什麼?
void DoSomething(std::list<SomeStruct>& someList);
變量someList
得到由DoSomething
填充。
我知道如何從庫中導出。我的主要問題是這個函數的「.NET友好」界面是什麼樣的?我假設std::list
是一個壞主意,如果我想用P/Invokes使用C#。
還有其他的選擇嗎?作爲調用者,我不會知道我應該提前通過的緩衝區的大小。而且,作爲調用者,我寧願不使用小的固定大小的緩衝區對函數進行多次調用,也不想傳入超大緩衝區。
這種情況的最佳做法是什麼?
您不能通過pinvoke將C++類暴露給託管代碼。只有C++/CLI可以在這樣的場景下工作。您仍在複製列表元素,除非它是簡單類型,否則這是不可避免的。一個結構並不簡單。 – 2012-03-13 23:25:36
謝謝@HansPassant - 我沒有使用STL列表類,而是使用(本地)動態分配數組來處理。這種方法如何被認爲?它是否太容易犯錯(關於釋放託管端的內存)?這樣的界面是否會通過「笑」因素? – jglouie 2012-03-14 00:07:25
您正在詢問與您在此處發佈的問題完全不同的問題。編輯或重新提問。 – 2012-03-14 00:17:06