Microsoft Visual Studio 2008を使用してC#アプリケーションを作成しましたが、今はCベースのDLLを使用したいと考えています。C#アプリケーションでCベースのDLLへの参照を追加するにはどうすればよいですか?
Visual Studio 2008のC#アプリケーションにそのCベースのDLLへの参照を追加するにはどうすればよいですか?
Microsoft Visual Studio 2008を使用してC#アプリケーションを作成しましたが、今はCベースのDLLを使用したいと考えています。C#アプリケーションでCベースのDLLへの参照を追加するにはどうすればよいですか?
Visual Studio 2008のC#アプリケーションにそのCベースのDLLへの参照を追加するにはどうすればよいですか?
あなたは、C#やVB.NETのプロジェクトのいずれかでネイティブ(アンマネージド)DLLへの参照を追加することはできません。それは単にサポートされていません。参照は他のの DLL(つまり、C#またはVB.NET、さらにはC++/CLIで作成したDLL)でのみ動作します。
ただし、はでもそのDLLのコードを使用できます。このトリックは、Win32 APIから関数を呼び出すために使用するのと同じP/Invoke構文を使用して、実行時に動的に提供する関数を呼び出すことです。あなたはDLLがtest.dll
という名前のファイルに、次を追加することで、その関数を呼び出すことができることをコンパイルしたと仮定して、今すぐ
extern "C" {
__declspec(dllexport) void AddNumbers(int a, int b, int* result)
{
*result = (a + b);
}
}
:
たとえば、あなたがC++を使用してDLLにコンパイル次のコードを持っていると仮定
[DllImport("test.dll"), CallingConvention=CallingConvention.Cdecl)]
private static extern void AddNumbers(int a, int b, out int result);
public int AddNumbers_Wrapper(int a, int b)
{
int result;
AddNumbers(a, b, out result);
return result;
}
またはVB.NETで、あなたが明らかに(問題のすべての兆候にもかかわらず)そのを使用しているので、::
あなたのC#アプリケーションのコード<DllImport("test.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function AddNumbers(ByVal a As Integer, ByVal b As Integer, _
ByRef result As Integer)
End Function
Public Function AddNumbers_Wrapper(ByVal a As Integer, _
ByVal b As Integer) As Integer
Dim result As Integer
AddNumbers(a, b, result)
Return result
End Function
DllImport
属性のCallingConvention
フィールドを、アンマネージメソッドの呼び出し規約に応じて適切に設定してください。
Here's a more detailed tutorial MicrosoftのサイトでP/Invokeを開始する方法について
私はそのコンポーネントhttp://www.pinvoke.net/をダウンロードします。 VB2008にピンボケを追加するにはどうすればいいですか? –
@panchalbhargav:わかりません。私は自分で定義を書く方が簡単だから自分のツールを使ったことはありません。私はそのサイトで多くのエラーを見つけました。あなたはPInvokeウェブサイトの指示を読もうとしましたか? –
pinvoke.netコンポーネントは必要ありません。http://msdn.microsoft.com/en-us/library/aa719104.aspxにはVB.NETの構文例があります –
あなたはVS 2003のドキュメントにリンクしています。なぜ、OPが使用しているVS 2008ドキュメントにリンクしていないのですか? – Oded
その特定の記事の新しいバージョンはありませんが、バージョン文字列(MSDN URLの最後の括弧内にあるもの)を削除することはお勧めです。 –
私はこのブックマークをブックマークに入れていたので、私はOPの精神から、2003年から2008年までの間の変更は直接関係しないと思っていました。 –
何を試しましたか?どのようなドキュメントを読んでいますか、ドキュメントで理解できないことはありますか? – Oded