所有的标题都是真的。我有一个用c ++编写的库,并编译成一个dll。我想在c#程序中使用此功能。是否可以直接从c#使用库中的类/函数,我是否需要编写一些包装代码才能在托管环境中使用它?它们可以在不安全的环境中使用吗?对不起,如果这是一个愚蠢的问题 - 我是一个c ++程序员试图转移到c#。
P.S。该库来自第三方,因此即使我有时间,也无法将其直接移植到c#。
答案 0 :(得分:2)
这取决于如何 C ++ dll导出它的功能。
如果是通过C ++类,那么最好的办法是在C ++ / CLI中构建一个包装器,它将使用C ++类并公开.NET类来与它们进行交互。
如果是通过“经典”C风格的函数,则可以使用p-invoke直接调用函数。它类似于访问System32
和User32
等系统DLL的方式。
答案 1 :(得分:1)
是的,这是可能的! 首先添加对System.Runtime.InteropServices的引用:
using System.Runtime.InteropServices;
必须在外部Dll上导入该功能后
[DllImport("ExternalDLL.dll", EntryPoint = "FunctionNameOnExtDll")]
public static extern CSharpDataType FunctionNameOnExtDll(ParameterDataType ParameterName);
最后使用!!
FunctionNameOnExtDll(Parameter);
答案 2 :(得分:0)
是的,只要知道要调用的函数的签名并使用System.Runtime.InteropServices工具即可。
为了提供帮助,请使用此工具PInvoke Interop Assistant,它可以帮助定义要在调用中传递的数据结构。