2015-10-14 42 views
1

我發現了類似的問題,但沒有爲我的情況工作,所以我問自己的問題。如何將一個向量作爲參數從CLI/C++ Wrapper傳遞給一個C++庫?

我想使用一個庫函數,它需要一個指向std :: vector的指針,並用數據填充它。

我已經有一個C++/CLI包裝器設置。 目前我正在試圖實例化載體在包裝,

private: 
    std::vector<int>* outputVector 

,並在構造函數中,我實例吧:

outputVector = new std::vector<int>(); 

現在,在調用C的包裝方法++庫函數:

m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector) 

我省略了其他參數,因爲它們對於這種情況不重要。我已經可以使用圖書館的其他功能,而且他們的工作沒有問題。我只是無法設法將指針傳遞給std :: vector。

通過這樣的代碼,我得到錯誤信息:

error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'cli::interior_ptr<Type>' to 'std::vector<_Ty> &' 

我曾試圖消除「&」,因爲我不是位於C++很大和很不清楚如何正確使用指針。然後,誤差爲:

error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'std::vector<_Ty> *' to 'std::vector<_Ty> &' 

編輯:我曾嘗試用 「*」,這是行不通的更換 「&」,我得到的錯誤:

無法從「STD轉換::矢量< _Ty>」到 '的std ::矢量< _Ty> &'

爲載體中的C++函數的簽名是這樣:

GetInRegion(..., std::vector<T*>& a_objects) 
+2

你真的想要傳遞指針的地址而不是指針嗎? 'GetInRegion'的簽名是什麼?請發佈[最小,完整,可驗證示例](https://stackoverflow.com/help/mcve)。 – robert

+1

你根本不需要'新'矢量,只需在函數調用中聲明它就可以了,傳遞(非指針)向量的地址,然後在函數調用後將數據編組到一個.Net集合中。 – crashmstr

+1

...從頭開始! 'GetInRegion'將一個*引用*引用到'T *'的'vector',所以你已經把它全部倒退了。 – crashmstr

回答

0

鑑於簽名:

GetInRegion(..., std::vector<T*>& a_objects) 

你會調用這個(在C++或C++/CLI),如:根據需要或

std::vector<int*> v; 
m_pUnmanagedTPRTreeClass->GetInRegion(..., v); 

然後你就可以操縱數據馬歇爾的數據轉換成.Net容器。

+0

非常感謝,被隱藏在圖書館的typedef下,我從未注意到它的含義。這解決了它! – Storm

+0

你好再次崩潰,我想給你發一封郵件,但我沒有弄明白,我無法將std :: vector 轉換爲託管C#可以使用的類型。我的麻煩來自部分,當我嘗試使用列表 ^或數組時,它不會讓我轉換。你能給我一些指導嗎? – Storm

+0

假設'int *'只是一個指向'int'的指針,請解除引用並保存'int'?不知道有關接口,所以不知道它是如何使用的。 – crashmstr

0

'的std ::矢量< _Ty> *' 到 '的std ::矢量< _Ty> &'

是自我解釋,你需要提領,而不是採取一個指針,所以不是的:

m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector) 

使用:

m_pUnmanagedTPRTreeClass->GetInRegion(..., *outputVector) 
              ^~~~~~~!! 

你的編輯後,我看到你的getinregion簽名是:

GetInRegion(..., std::vector<T*>& a_objects) 

所以它接受的std ::向量,其中T是一個指針,而你想傳遞給getinregion一個std ::向量,其中int是不是一個指針。

+0

你好,對不起,遺憾,但我已經嘗試了你的建議。我得到了同樣的錯誤,除了它:'std :: vector <_Ty>'to'std :: vector <_Ty>&' – Storm

+0

@Storm看到我的編輯,我承認我不知道CLI在這裏可能會導致多大的問題。 – marcinj

相關問題