2012-03-13 4 views
0

ネイティブC++コードから静的メソッドにstd :: vectorを渡す方法を見つけようとしています。 CLI管理クラス。私はC++(管理されていない)に新しいので、これには幸運がありませんでした。私が望むのは、std:vector(どの型でもよいが、好ましくはdoubleまたはint)をマネージC++/CLI配列および/またはC#配列に変換する方法に関するいくつかのポインタです。おそらく、これはできません。逆のことを行う例(例:C#からネイティブC++)が表示されるだけです。たとえば、「convert System::array to std::vector」を参照してください。以下では、私の不合理な試みを要約します。ネイティブC++から管理された配列へのC++/CLIおよび/またはC#でのstd :: vectorの受け渡し

Iが(クラスは、C++/CLIのプロジェクトである)ネイティブC++クラスで定義されたメソッドにそのような

vector<vector<double> > dblvec 

二重ベクトルを渡すことができるではなく、参考文献に記載の方法にクラス(C++/CLIプロジェクトでも)。コンパイラは(refクラスの)メソッドが存在しない(候補関数にアクセスできない)と訴える。私はこれがベクトルと関係があると考えています>私的な変数であることに焦点を当てています(例えばC++ CLI error C3767: candidate function(s) not accessible参照)。

ご協力いただければ幸いです。

答えて

0

はい、本質的には原因が正しくあります(ネイティブタイプはアセンブリ外でパブリックではありません)。また、make_publicプラグマを使用しても、テンプレート型をパブリックにすることはできないので、簡単に修正できません。

あなたはこの問題を回避するために、次の読みたいと思うでしょう: Best workaround for compiler error C2158: make_public does not support native template types

幸運を!

+0

おかげで非常に多くのマットを確認します。本当にありがとう。あなたが提案する回避策はあなたによって考案されたので、アドバイスを得るには良い人だと思います!私は明日あなたの回避策を見て、私がそれを理解し、自分の状況のた​​めに働くことができるかどうかを見ていきます。 – dandar

-1

一般的な問題は...あなたの非常に迅速な応答を以下の...

#include <vector> 

// ref https://msdn.microsoft.com/en-us/library/ms235281.aspx 
// compile with: /clr /LD 
#include <windows.h> 
#include <vcclr.h> 
#using <System.dll> 

using namespace System; 

// common issues for less complex work addressed in the following links 
// ref http://stackoverflow.com/questions/19163839/how-to-access-class-in-c-cli-from-c 
// ref https://drthitirat.wordpress.com/2013/05/30/combine-gui-of-c-with-c-codes/ 
// ref https://drthitirat.wordpress.com/2013/06/03/use-c-codes-in-a-c-project-wrapping-native-c-with-a-managed-clr-wrapper/ 
// ref http://stackoverflow.com/questions/31417688/passing-a-vector-array-from-unmanaged-c-to-c-sharp/31418911#31418911 
// ref http://en.cppreference.com/w/cpp/language/try_catch 
関連する問題