[英]Using c++ library in c#
我正在尝试在我的 c# 项目中包含 c++ 库 (DLL),但是每次我这样做时,我都会在 VS2008 中收到以下错误消息,有什么建议吗?
编辑:这是一个 C++ MFC DLL
--------------------------- Microsoft Visual Studio --------------------------- A reference to 'C:\\Users\\cholachaguddapv\\Desktop\\imaging.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
如果它是“普通”DLL(不是 COM,不是托管 C++),则不能添加这样的引用。 您必须为要在 DLL 中调用的导出添加 p/invoke 签名(外部静态方法定义)。
[DllImport("yourdll.dll")]
public static extern int ExportToCall(int argument);
查看联机帮助中的DllImport属性。
如果它是一个直接的 C++ 库,那么就不可能以这种方式引用它。
您有两个选择,您可以将 C++ 库编译为程序集,并使用 C++/CLI 包装器公开非托管代码。
-或者-
如果库通过 C API 公开其功能,您可以使用一些 p/invoke 调用。
您能否稍微扩展一下问题,以包括一些有关您通常如何从 C++ 调用 imageing.dll 的详细信息?
如果它是非托管 dll,则无法添加对它的引用。 您必须使用 pinvoke 或类似的方法调用它:
public classFoo
{
[DllImport("myunmanaged.dll", CharSet = CharSet.Ansi)]
private extern static int UnmanagedFunction(int type, int dest);
}
如果您想将其转换为托管 dll,请查看此处: http : //msdn.microsoft.com/en-us/library/aa446538.aspx
如果您想了解有关 pinvoke 和 dllimport 的更多信息,请查看此处: http : //msdn.microsoft.com/en-us/library/aa288468.aspx
干杯
托管代码 (C#) 和非托管代码 (WIn32 C++) 之间的调用约定和内存模型差异使它们不兼容。
但是,.NET 包含 COM 对象的桥接技术,因此如果您将 DLL 映像为 COM 对象,则它可以工作。 但是,它显然不是 COM 对象。
如果它是一个干净的 C++ DLL,您只导出与 C 兼容的函数,那么您可以使用 P/Invoke 来使用这些函数。 如果您将该 C++ DLL 转换为带有类型库的 COM DLL,则使用它会更容易:您可以将类型库导入到 .NET 中,并且会为您创建 .NET 包装器(称为运行时可调用包装器)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.