2

C ++ win32dll1.dll:

extern "C" __declspec(dllexport) int getSerialNumber(char* outs)
{
    char s[2];
    s[0]='0';
    s[1]='1';

    for(int i=0; i < 2; ++i){
        outs[i] = s[i];
    }
    return 1;
}

C#:

[DllImport("win32dll1.dll")]
public unsafe static extern int getSerialNumber(char* ss);

s関数を渡すことができません

char[] s = new char[2];
getSerialNumber(s);

これはうまくいかないのですか?なぜまたはなぜそうではないのですか?

4

1 に答える 1

3

StringBuilderおそらく宣言で使用する必要があります:

[DllImport("win32dll1.dll")]
public unsafe static extern int getSerialNumber(StringBuilder s);

CLRはそれを自動的にC++char*に変換し、関数を呼び出してから、結果を変換してに戻しStringBuiderます。

このようなものでそれを呼び出します:

var sb = new StringBuilder(2);
getSerialNumber(sb);

数値は、初期容量を文字数で指定します。この例では、2文字だけです。C ++コードがそれ以上の書き込みを行うと、アプリがクラッシュします。

于 2012-12-02T10:09:26.857 に答える