パフォーマンスは重要なので、私はプロジェクトで自分自身を取り組んでいます。私はC++のコードの一部を書きたいと思っていて、C#からC++コードを呼びたいと思っています。私はC + +ライブラリを書くだろうし、C#のラッパーを書いて、どのように私はそれを行うことができますか?私はどこで勉強しなければならないのですか? [任意のウェブサイト、リンク、書籍]C#でライブラリを使用する
ありがとう!
パフォーマンスは重要なので、私はプロジェクトで自分自身を取り組んでいます。私はC++のコードの一部を書きたいと思っていて、C#からC++コードを呼びたいと思っています。私はC + +ライブラリを書くだろうし、C#のラッパーを書いて、どのように私はそれを行うことができますか?私はどこで勉強しなければならないのですか? [任意のウェブサイト、リンク、書籍]C#でライブラリを使用する
ありがとう!
例:
の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
あなたは
void World_Hello(World* self) { self->Hello(); }
またはCallingConvention.ThisCallを調査するように、使用するP /呼び出しのためのCスタイルの輸入を作るのいずれかが必要です。ネームマングリングのおかげで、他のOSに移植したい場合は、前者が良い選択です。
C++/CLIを見てください。 Nishant SivakumarのC++/CLI in Actionをお勧めします。また、このリンクをチェックしてください:http://msdn.microsoft.com/en-us/magazine/cc163855.aspx#S7
早すぎる最適化は悪です。 C#が遅すぎることがわかるまで、これをしないでください。 (_hint_:ほとんど間違いではありません) – SLaks
別のライブラリを呼び出すことは、そのライブラリ内のコードがタイトなループで繰り返し実行されない限り、実際にははるかに高速になるとは思われません。 SLaksが述べるように、C#でコードをプロファイリングしてから、C++とP/Invokingで時間を無駄にする前にプロファイリングしてください。 –