1

私はCで機能しています

void GetCharArray(char* arrayNew[5])
{
arrayNew[5]= {"Test", 
            "Test2",
            "Test4",
            "Test5",
            "Test6",        

    };  
}

extern "C" __declspec(dllexport) void GetCharArray(char* arrayNew[5]);

次のように私のC#コードからそれを呼び出したい

   [DllImport(@"Test.dll",
        CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]       
    public static extern void GetCharArray(String[] sbOut);

 List<string> testList = new List<string>();
 GetCharArray(testList .ToArray());

testListにCコードの値を入力したいのですが、正しい方法でマーシャリングしています。デバッガーがGetCharArray()関数に到達すると、エントリポイントが見つかりません。親切に助けてください。

4

1 に答える 1

1

エントリ ポイントが見つかりません。シンボルが見つからないことを意味します。関数名は GetCharArray ですが、そのシンボル名は正確に GetCharArray という名前ではありません。ネイティブ DLL をコンパイルするときに、シンボルをエクスポートしてリンカー定義を作成し、シンボルに名前を付けて、DllImport が正しく機能するようにしてください。さらにサポートが必要な場合は、より多くの情報を提供できます。DllImportを正しく使用したために同様の問題が発生したため、機能しない理由はわかっていると思います。

外部リソース

PS DLL から情報をダンプして正確なシンボル名を取得するコマンド ライン ツールもあります。シンボルの命名規則はさまざまです。

于 2012-07-18T15:26:38.687 に答える