是否可以将用C ++编写的动态库导入C#程序

本文关键字:动态 导入 程序 是否 | 更新日期: 2023-09-27 18:33:39

真的都在标题中。我有一个库,用c ++编写并编译成dll。我想在 c# 程序中使用此功能。是否可以直接从 c# 使用库中的类/函数,我是否需要编写一些包装器代码才能在托管环境中使用它?它们可以在不安全的环境中使用吗?抱歉,如果这是一个愚蠢的问题 - 我是一名 c++ 程序员,试图转向 c#。

附言该库来自第三方,因此即使我有时间,我也无法将其直接移植到 C#。

是否可以将用C ++编写的动态库导入C#程序

这取决于C++ dll 如何导出其功能。

如果是通过C++类,那么最好的办法是在 C++/CLI 中构建一个包装器,该包装器将使用C++类并公开 .NET 类以与它们交互。

如果是通过"经典"C 样式函数,那么可以使用 p-invoke 直接调用函数。 它类似于访问System32User32等系统 DLL 的方式。

是的,这是可能的!首先添加对 System.Runtime.InteropServices 的引用:

using System.Runtime.InteropServices;

必须在外部 Dll 上导入函数后:

    [DllImport("ExternalDLL.dll", EntryPoint = "FunctionNameOnExtDll")]
    public static extern CSharpDataType FunctionNameOnExtDll(ParameterDataType ParameterName);

最后用它!!

FunctionNameOnExtDll(Parameter);

是的,只要知道要调用和使用System.Runtime.InteropServices设施的函数的签名,就可以了。
若要提供帮助,请使用此工具 PInvoke 互操作助手,它可以帮助定义要在调用中传递的数据结构。