C言語で記述された大きなライブラリをC#プログラムでDLLとして使用したいと思います。ほとんどのCコードはライブラリ自身の関数で使用されますが、C#プロジェクトから呼び出すことができる関数が必要です。C#StringとC Charポインタの間の変換方法
だから
__declspec(dllexport) char* test(char* a){
char* b = "World";
char* result = malloc(strlen(a) + strlen(b) + 1);
strcpy(result, a);
strcpy(result, b);
return result;
}
以下の例のC関数はC#コードで今があります私はusing System.Running.InteropServices;
とも[DllImport("mydll.dll")]
を持っているが、私は、関数を宣言するかどうかはわかりません。
public static extern char* test(char* a);
C#はCのようなポインタをサポートしていないため、明らかに機能しません。
文字列をこのC関数に渡して文字列も返す必要がありますか?
あなたはCライブラリを使用しなければならないのですが、C#で同じことを処理する独自のメソッドを書くことができないのですが、これはかなり正直なところです。 – MethodMan
C#はポインタをサポートしていますが、ここにそれらが必要です。あなたの関数は 'int'を返しますが、' char * 'を返そうとしています - これはエラーです。そして、通常は、関数にバッファを提供するためのバッファを提供します。または、割り当てた文字列を解放するために2番目の関数をエクスポートする必要があります。 –
このような文字列を返すのはリークです。適切な方法はhttp://stackoverflow.com/questions/5298268/returning-a-string-from-pinvokeを参照してください。 –