我需要将C ++ dll绑定到我的C#WinCE程序。 (扫描仪dll)
我怎么做?
提前谢谢
答案 0 :(得分:3)
您需要使用Interop来调用非托管代码。
using System.Runtime.InteropServices; // DllImport
public class Win32 {
[DllImport("User32.Dll")]
public static extern void SetWindowText(int h, String s);
}
这篇文章详细讨论了该主题(代码的来源也是如此)。
答案 1 :(得分:0)
InterOp的替代方法是使用CLR扩展编写C ++ DLL,它充当传统C ++ DLL的包装器。这使您有机会处理不寻常的类型,例如:自定义结构或类,如果Marshaling不起作用。 (根据MSDN,您可以扩展Marshaling支持(http://msdn.microsoft.com/en-us/library/bb531313.aspx),但我没有亲自尝试过,根据您正在做的事情,可能需要做很多工作。)
例如,如果要访问导出类的DLL,可以拥有一个包装器DLL,它拥有C ++类的实例,并定义一个映射到C ++类的.NET类。例如,这是一个来自C ++ / CLR DLL的片段,我们用它来制作.NET中可用的旧C ++ DLL之一:
// This is the constructor for the CLR (managed) object
FileInf::FileInf()
{
// Create the C++ (unmanaged) object
m_pFileInf = gcnew DILib::FileInf();
}
// This is a managed interface which replicates the old
// unmanaged functionality
bool FileInf::IsDirectory()
{
return m_pFileInf->IsDirectory();
}
我想说如果InterOp工作然后坚持下去,但我不确定它是否是解决每个C ++ / .NET接口问题的最佳方法,这是另一种选择。