2011-07-08 7 views
1

の間で "値" を渡すために、私はCでDLLプロジェクト++などを持っている:上記のように、どのようにC#とC++のdll

[DllImport("ReportContent.dll")] 
extern static bool cppPage1() 
public void Page1() 
{ 
    StringBuilder s1 = new StringBuilder("1#3", 10000); 
    StringBuilder s2 = new StringBuilder("", 10000); 
    cppPage1(s1, s2); 
} 

_declspec(dllexport) bool __stdcall cppPage1(char* Input, char* Output) 
{ 
    string str1 = Input; 
    //blablabla 
    strcat(Output, "Result#as#a#string"); 
} 

そして、C#で、私はこれを使用私はStringBuilderでいくつかのRAMを "取得"します.C#とC++は両方とも読み書きが可能です。 C++はRAMからInputを読み取り、論理を計算して、RAMにあるOutputに書き込み、C#が結果を得ることができるようにします。 StringBuilder.Length = 10000に、ほとんどの状況で十分であることを確認してください。

C#でRAMを検討するのは良い方法ではないと思います。 C#とC++の正しい通信方法は何ですか?

+5

1日 – sehe

+0

@seheのワードRAMのほとんどファジー使用や、私がすべきメモリや何を言う?おそらく、 – hbrls

+0

。あなたが実際に得ているのは、あなたが間接参照することを選択したメモリアドレス(=メモリへのポインタ)です。メモリは常にそこにあり、取得するためにinterop呼び出しを行う必要はありませんでした。 – sehe

答えて

3

P/Invokeマーシャリング規則を使用して、CからC#に署名を変換する必要があります。あなたに役立つツールがいくつかあります。ここで

はドキュメントです

+0

私は 'MarshalAs(UnmanagedType.LPStr)'のようなものを使用しようとしていますが、うまく動作します。ありがとう。 – hbrls

関連する問題