簡體   English   中英

如何封送載體 <double> 從C ++到C#

[英]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將幫助您擺脫長度檢查的麻煩。

從C ++到C#的3D矢量結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM