繁体   English   中英

如何在C#应用程序中添加对基于C的DLL的引用?

[英]How can I add a reference to a C-based DLL in my C# application?

我使用Microsoft Visual Studio 2008创建了一个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语法在运行时动态调用它提供的函数。

例如,假设您使用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字段。

这是一个关于如何在微软网站上开始使用P / Invoke 的更详细的教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM