0

C# プログラムから C++ ライブラリを呼び出す必要があります。署名が次のようなメソッドがあります。

int __stdcall meythodName(const char *c, struct TheirStruct[] s1, struct TheirStruct[] s2)

すべてのパラメーターは出力パラメーターです。

このメソッドを次のように呼び出そうとしています:

[DllImport("theirlib.dll", CallingConvention = CallingConvention.StdCall)]
extern static int meythodName(ref string c, ref TheirStruct[] s1, ref TheirStruct[] s2);

TheirStruct は次のようになります。

[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 13)]
public class TheirStruct
{
   public int i;  
   public int j;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
   public string s;
}

theirStruct (PACKED でサイズが 13 バイト) は、dll マニュアルで次のように説明されています。

#define LEN 5
#define SIZE 50

struct TheirStruct 
{
    char c[LEN]; 
    int i;                   
    int j;                   
};

このメソッドを呼び出そうとすると、エラー コードが表示されずにアプリケーションが終了してしまいます。この問題について説明してもらえますか?

4

1 に答える 1

0

見つかった!!!

私は、TherStruct 宣言で「class」を「struct」に変更し、メソッド呼び出しで di 「ref」キーワードを削除し、それに応じて [In]/[Out] を設定する必要がありました。

とても簡単ですが、これが役に立てば幸いです!!

于 2013-09-23T10:47:34.203 に答える