none
C#のプログラムからC++で書かれたDLLのエクスポート関数を呼び出して、構造体の配列を受け取りたいのですが。 RRS feed

  • 質問

  • C#のプログラムで、C++で書かれたDLL(Unmanaged)のエクスポート関数を呼び出し、その関数からの情報をC#で受け取りたいと考えています。
    受け取るデータは、構造体の配列で、C++側では、構造体の配列のポインタとバッファサイズのデータを引数として受け取ります。

    C#側で、構造体の定義に、[StructLayout(LayoutKind.Sequential)]属性をつけて定義を行います。
    この構造体の配列を確保します。

    C#から、refキーワードをつけて、確保した配列と、確保したサイズをDllImportで読み込んだ関数に対して実行します。

    しかし、関数Call後に、この配列はNUllになって戻されます。
    Managedd配列を確保した場合、連続領域に確保される保証もありませんので、そのあたりに問題があると考えています。

    WindowsAPIなどでも、構造体の配列のポインタを渡し、結果も、その構造体の配列で受け取ることはよくあることなのですが、
    どのようにコードを書けばよいか、よくわかりません。
    初歩的な質問で恐縮ですが、教えていただけないでしょうか。

    Reiji Tanaka
    2009年6月25日 12:21

回答

すべての返信