私はUWPプロジェクトに取り組んでいます。私は、C#からC++(XAMLの上にDirectXで生成されたメッシュをレンダリングするため)の位置データの配列を送信したいです(現在、私はフロート配列をテストとして使っています)。UWPアプリケーションの配列をC#からC++/Cxのdllに送信
私はこれを試しました:Improper marshaling: C# array to a C++ unmanaged array(受け入れられた答え)。しかし、それは動作しません、私は何かが不足していると思いますが、私は何がわからない。彼が示唆したことを試してみると、私のコンパイラはC++で宣言されたCInput構造体について、それがネイティブなので不平を言うので、パブリック関数のパラメータにすることはできません。 (C#のから呼び出される関数)
は(私はその質問にコメントしているだろうが、私はまだその特権を持っていません。)
これは私のコードです:
C#で:
(D3DPanel.hで)C++でpublic struct CInput
{
public IntPtr array;
}
public VideoView()
{
InitializeComponent();
Loaded += OnLoaded;
float[] test = new float[4];
CInput input = new CInput();
input.array = Marshal.AllocHGlobal(Marshal.SizeOf<float>() * test.Length);
Marshal.Copy(test, 0, input.array, test.Length);
D3DPanel.CreateMesh(out input, test.Length);
Marshal.FreeHGlobal(input.array);
}
:
struct CInput
{
float* array;
};
[Windows::Foundation::Metadata::WebHostHidden]
public ref class D3DPanel sealed : public Track3DComponent::DirectXPanelBase
{
public:
D3DPanel();
void CreateMesh(CInput points, int length);
}
誰もが私が間違ってやっているものを私に教えてもらえます?
EDIT:
hereを説明するように、私は、PassArrayパターンを試してみましたが、それは、このエラーを与える: "エラーC4400"のconst int型:このタイプでのconst/volatile修飾子はサポートされていません"
void CreateMesh(const Array<float>^ points, int length);
"const Array ^"を "Array"に置き換えると、 "syntax error:identifier 'Array'"と表示されます。
私は受け入れられた答えで書かれたことをしようとしているので、構造体を使用しています。私はあなたが言っていることを正確に理解しているか分からない(実際には、私はそうではないと確信している)。あなたが話しているタイプを調べて、それをより良く理解できるかどうかを見て、新しい質問に戻ってきます。 – Stef
したがって、IVectorを使用するには、IVectorから継承し、C++/CX部分のCIput構造体の代わりにそのクラスを使用する新しいrefクラスを作成する必要があります。あれは正しいですか?だから私はIVectorで定義されているすべての関数を実装する必要がありますか? – Stef
Platform :: Arrayを使用しようとすると、コンパイラはそれに不平を言う。 (エラーC2061 \t構文エラー:識別子 '配列') – Stef