2011-12-24 10 views
1

Microsoft Visual Studio 2008を使用してC#アプリケーションを作成しましたが、今はCベースのDLLを使用したいと考えています。C#アプリケーションでCベースのDLLへの参照を追加するにはどうすればよいですか?

Visual Studio 2008のC#アプリケーションにそのCベースのDLLへの参照を追加するにはどうすればよいですか?

+0

何を試しましたか?どのようなドキュメントを読んでいますか、ドキュメントで理解できないことはありますか? – Oded

答えて

4

あなたは、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を開始する方法について

+0

私はそのコンポーネントhttp://www.pinvoke.net/をダウンロードします。 VB2008にピンボケを追加するにはどうすればいいですか? –

+0

@panchalbhargav:わかりません。私は自分で定義を書く方が簡単だから自分のツールを使ったことはありません。私はそのサイトで多くのエラーを見つけました。あなたはPInvokeウェブサイトの指示を読もうとしましたか? –

+0

pinvoke.netコンポーネントは必要ありません。http://msdn.microsoft.com/en-us/library/aa719104.aspxにはVB.NETの構文例があります –

1
+0

あなたはVS 2003のドキュメントにリンクしています。なぜ、OPが使用しているVS 2008ドキュメントにリンクしていないのですか? – Oded

+1

その特定の記事の新しいバージョンはありませんが、バージョン文字列(MSDN URLの最後の括弧内にあるもの)を削除することはお勧めです。 –

+0

私はこのブックマークをブックマークに入れていたので、私はOPの精神から、2003年から2008年までの間の変更は直接関係しないと思っていました。 –

関連する問題