2011-01-23 18 views
0

パフォーマンスは重要なので、私はプロジェクトで自分自身を取り組んでいます。私はC++のコードの一部を書きたいと思っていて、C#からC++コードを呼びたいと思っています。私はC + +ライブラリを書くだろうし、C#のラッパーを書いて、どのように私はそれを行うことができますか?私はどこで勉強しなければならないのですか? [任意のウェブサイト、リンク、書籍]C#でライブラリを使用する

ありがとう!

+4

早すぎる最適化は悪です。 C#が遅すぎることがわかるまで、これをしないでください。 (_hint_:ほとんど間違いではありません) – SLaks

+0

別のライブラリを呼び出すことは、そのライブラリ内のコードがタイトなループで繰り返し実行されない限り、実際にははるかに高速になるとは思われません。 SLaksが述べるように、C#でコードをプロファイリングしてから、C++とP/Invokingで時間を無駄にする前にプロファイリングしてください。 –

答えて

3

例:

のWindows:

[DllImport("User32.dll")] 
public static extern void SetWindowText(int h, String s); 



のLinux:

[System.Runtime.InteropServices.DllImport("/root/Desktop/q3noclient/libnoclient.so")] 
static extern int DisconnectClient (string strServerIP, int iServerPort, string strClientIP, int iClientPort); 



のC#:

[DllImport("Comdlg32.dll", CharSet=CharSet.Auto, SetLastError=true)] 
private static extern bool GetSaveFileName(ref OPENFILENAME lpofn); 



VB.NET:

<DllImport("Comdlg32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ 
Private Shared Function GetSaveFileName(ByRef lpofn As OPENFILENAME) As Boolean 
End Function 
0

あなたは

void World_Hello(World* self) { self->Hello(); } 

またはCallingConvention.ThisCallを調査するように、使用するP /呼び出しのためのCスタイルの輸入を作るのいずれかが必要です。ネームマングリングのおかげで、他のOSに移植したい場合は、前者が良い選択です。

関連する問題