0

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

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

4

3 回答 3

2

这取决于C++ dll 如何导出它的功能

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

如果是通过“经典”C 风格的函数,那么您可以使用 p-invoke 直接调用函数。它类似于系统 DLL 喜欢System32User32访问的方式。

于 2013-10-02T14:25:47.020 回答
1

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

using System.Runtime.InteropServices;

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

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

最后使用它!

FunctionNameOnExtDll(Parameter);
于 2013-10-02T14:21:42.050 回答
0

是的,只要知道要调用的函数的签名并使用 System.Runtime.InteropServices 设施,这是可能的。
为了提供帮助,请使用此工具PInvoke Interop Assistant,它可以帮助定义要在调用中传递的数据结构。

于 2013-10-02T14:41:44.267 回答