我使用Microsoft Visual Studio 2008创建了一个C#应用程序,现在我想使用基于C的DLL。
如何在Visual Studio 2008中向C#应用程序添加对该基于C的DLL的引用?
答案 0 :(得分:4)
您无法在C#或VB.NET项目中添加对本机(非托管)DLL的引用。这根本就不受支持。引用仅适用于其他托管 DLL(即您可能使用C#或VB.NET,甚至C ++ / CLI编写的那些)。
但是, 仍然可以使用该DLL中的代码。诀窍是使用用于从Win32 API调用函数的相同P / Invoke语法在运行时动态调用它提供的函数。
例如,假设您使用C ++将以下代码编译到DLL中:
extern "C" {
__declspec(dllexport) void AddNumbers(int a, int b, int* result)
{
*result = (a + b);
}
}
现在,假设您将该DLL编译为名为test.dll
的文件,您可以通过将以下代码添加到C#应用程序来调用该函数:
[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中,因为你显然正在使用它(尽管问题中有所有迹象):
<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关于如何在微软网站上开始使用P / Invoke。