2016-07-21 28 views
0

C#2Dオブジェクト配列をC++ std 2Dオブジェクト配列に変換するには、どのような方法が最適でしょうか。C#オブジェクト[、] 2D配列をC++ std 2D配列に変換する

var data = new object[1, 5]; 
data[0, 0] = "1"; 
data[0, 1] = 1.1; 
data[0, 2] = DateTime.Now; 
data[0, 3] = true; 
data[0, 4] = null; 

マーシャリングのプロセスは次のようにどのようになります。

は例えば、私はこのC#の2Dオブジェクトの配列を持っていますか? - 可能であれば

C# - > C++マーシャリングに関するお勧めのリソースはありますか?

ありがとうございました。

答えて

0

マーシャリングは、独自の方法でC#の配列内のすべてのインデックスを通じてC++

  • ループ中の2Dオブジェクト配列を作成し、C++に各オブジェクトをマーシャリング

    1. ようになり
    2. 利益

    ネイティブコードは厄介です。すべてがマーシャルされるべきであることを正確に知る必要があります。そして、C#はC++との相互運用を試みることさえありません。COM、.NET、Cのようなライブラリとの相互運用のために設計されています。 種類のが可能ですが、実際にはC#から直接C++と相互運用することは望ましくありません。

    .NETからC++へのinteropが必要な場合は、C++/CLIが最適です。これにより、ネイティブC++とマネージドC++の両方を1つのマネージアセンブリで組み合わせることができます。しかし、それでもまだ多くの作業が行われています。ネイティブC++での経験が豊富な人でなければ、小さな間違いが容易に伝播し、予期しない方法でアプリケーションを破壊してデバッグが非常に難しくなるので、非常に注意する必要があります。

  • +0

    こんにちは@luaan応答のおかげで。 C#→C++/CLIからの変換は自動的に行われますが、cli:arrayへと変換されます。 私が達成しようとしているのは、基本的には、MatLabで使用されているC#で書いた大きなファイルのCSVパーサーの周りに簡単なラッパーを書くことです。 .NET CLIからMatLabセルへの変換が激しくなるのを避けるため、ネイティブC++でラッパーを記述し、MatLab IDXとの相互運用が可能かどうかを確認したいと考えています。 :) –

    +0

    @MarjanNikolovski私はそれが自動であると言っているわけではない - あなたはまだすべての単一のオブジェクトを手動で変換する必要があります。 C++とは異なり、C++ではC++オブジェクトを扱うことができるので、C++では*可能です*だけです。 C++オブジェクトが必要ない場合は、C#を使用することができますが、あなたの記述によるとそうは思われません。 – Luaan