[英]How to marshal a vector<double> from C++ to C#
我當前的解決方法是,使用C#從C#獲取向量的大小:
[DllImport("BridgeInterface.DLL", EntryPoint = "#46", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl]
private static extern int GetVectorSize();
其中BridgeInterface.dll
是我的C ++和C#代碼之間的C ++橋接口。 然后,我使用以下命令封送每個向量元素:
[DllImport("BridgeInterface.DLL", EntryPoint = "#47", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl]
private static extern double GetVectorElement(int index);
有沒有一種方法可以通過對C ++的一次調用來封送整個向量?
按照標准,std :: vector <>必須駐留在連續的內存空間中。 因此,所有double
都在一個內存塊中,因此可以將其作為單個內存緩沖區編組(獲取指向第一個元素的指針,並對緩沖區的長度執行size() * sizeof(double)
)。 之后,將其簡化為編組double
數組的情況,我在這篇文章中解釋了如何(帶有和不帶有C#內存空間的復制)。
使用固定長度的DataStructure將幫助您擺脫長度檢查的麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.