我正在制作使用tesseract,opencv,SDL,自动文字以及将来可能使用C ++编写的其他库的程序。什么是我能做的最好的GUI(MFC,C ++ / CLI,ATL,WTL,C#) - 最快的开发? tesseract,opencv,SDL库是在未经管理的或托管的C ++上编写的吗?有没有办法在C ++上编写非托管库,以便在C ++ / CLR或C#中使用?我也听说过像#34;服务"。它们是否允许语言和GUI开发的组合,哪个更好(或者更快开发) - > dll还是服务?
答案 0 :(得分:2)
你的问题非常广泛,因此我将重点关注一些重点:
C和C ++库可以在C ++ / CLI中使用
使用C#编写的程序集可以轻松访问用C ++ / CLI编写的程序集中的托管代码(ref class
es或value class
es
.NET中基本上有2个GUI框架:WPF和Windows Forms。甚至可以直接从C ++ / CLI使用Windows Forms,但是:不要这样做!而是:
编辑 - 一个非常简单的包装器的示例:
// native includes
#include <Windows.h>
#include <lmcons.h>
namespace My
{
// a managed class which is public and can be used by other assemblies
public ref class Wrapper
{
public:
// a function with a managed return type
static System::String^ CallNativeFunction()
{
// call native function
DWORD length = UNLEN;
wchar_t userName[UNLEN];
GetUserName(userName, &length);
// convert result of native function to managed System::String
System::String^ result = gcnew System::String(userName, 0, length);
return result;
}
};
} // namespace
int main(array<System::String ^> ^args)
{
// usage of the wrapper class
System::Console::WriteLine(My::Wrapper::CallNativeFunction());
return 0;
}
在您的C#项目中,您可以添加对C ++ / CLI项目的引用,然后只需调用My.Wrapper.CallNativeFunction()
。