C++;代码加C#GUI 我正在编写程序,使用TestSerACT、OpenCV、SDL、Word自动化,也许将来还有其他库,用C++编写。我能做的最好的GUI(MFC、C++/CLI、ATL、WTL、C#)是什么?开发速度最快?是在非MnMault+或管理C++上编写的TestSerAt、OpenCV、SDL库吗?在C++和CLR或C语言中有没有用C++编写的非托管库?我还听说了一些类似“服务”的东西。它们是否允许语言和GUI开发的结合,以及哪个更好(或开发更快)->dll还是服务?

C++;代码加C#GUI 我正在编写程序,使用TestSerACT、OpenCV、SDL、Word自动化,也许将来还有其他库,用C++编写。我能做的最好的GUI(MFC、C++/CLI、ATL、WTL、C#)是什么?开发速度最快?是在非MnMault+或管理C++上编写的TestSerAt、OpenCV、SDL库吗?在C++和CLR或C语言中有没有用C++编写的非托管库?我还听说了一些类似“服务”的东西。它们是否允许语言和GUI开发的结合,以及哪个更好(或开发更快)->dll还是服务?,opencv,dll,service,c++-cli,tesseract,Opencv,Dll,Service,C++ Cli,Tesseract,您的问题非常广泛,因此我将重点关注以下几点: >C和C++库可用于C++/CLI 用C#编写的程序集可以轻松访问用C++/CLI编写的程序集中的托管代码(ref classes或value classes) 在.NET中基本上有两种GUI框架可用:WPF和Windows窗体。甚至可以从C++/CLI直接使用Windows窗体,但是:不要这样做而不是: 在C++/CLI中编写本机库的包装器代码 选择GUI框架并用C实现GUI# 通过C++/CLI包装器使用本机库 编辑-一个非常简单的包装示

您的问题非常广泛,因此我将重点关注以下几点:

>C和C++库可用于C++/CLI

  • 用C#编写的程序集可以轻松访问用C++/CLI编写的程序集中的托管代码(
    ref class
    es或
    value class
    es)

  • 在.NET中基本上有两种GUI框架可用:WPF和Windows窗体。甚至可以从C++/CLI直接使用Windows窗体,但是:不要这样做而不是:

    • 在C++/CLI中编写本机库的包装器代码
    • 选择GUI框架并用C实现GUI#
    • 通过C++/CLI包装器使用本机库
  • 编辑-一个非常简单的包装示例:

    // 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;
    }
    
    //本机包含
    #包括
    #包括
    名称空间我的
    {
    //公共的托管类,可由其他程序集使用
    公共引用类包装器
    {
    公众:
    //具有托管返回类型的函数
    静态系统::字符串^CallNativeFunction()
    {
    //调用本机函数
    DWORD长度=UNLEN;
    wchar_t用户名[UNLEN];
    GetUserName(用户名和长度);
    //将本机函数的结果转换为托管系统::字符串
    系统::字符串^result=gcnew系统::字符串(用户名,0,长度);
    返回结果;
    }
    };
    }//名称空间
    int main(数组^args)
    {
    //包装器类的用法
    System::Console::WriteLine(My::Wrapper::CallNativeFunction());
    返回0;
    }
    

    在C语言项目中,可以添加对c++/CLI项目的引用,然后简单地调用<代码>我的包装器.CalnTyrValuy()/< > > /P>您可能可以使用C++代码使用C++的GUI,但是为什么呢?Qt是C++管理的或非托管C++的一个很好的GUI,它有用于办公自动化的工具吗??Qt是独立的,不依赖于.NET,因此它是非托管C++。我相信可能有一些工具,但我不太确定。我知道C++和CLI,我已经尝试过,但是发现托管和非托管C++ Sun税金之间有很大的区别,所以这意味着我可以使用TestSerACT 3.02,OpenCV 2.4.11,SDL 2在C++ + CLI中,这是不推荐的。因为我试过了,很多头文件都有错误?为tesseract编写包装器是什么意思?如果是这样的话——3.02版的C#有书面包装,价格对我来说太高了。我认为visual studio的tesseract 3.02是非托管的,需要将.lib文件与.dll一起引用。我不想要整个tesseract功能。我添加了一个示例。我不熟悉tesseract或SDL,但我已经将OpenCV与C++/CLI结合使用了。确保使用“公共语言运行时支持(/clr)”而不是“/clr:pure”或“clr:pure”编译项目。然后可以混合使用这两种语法。编译将在两种Sintax上成功运行,但设计器崩溃,这会减慢我的工作。在问我的问题之前,我读了很多东西,这就是为什么它如此含糊的原因。AccTuraly我用更少的代码来寻找最好的方法-比如Qt,像Fr.Bru,因为它都是非托管C++,没有包装器或非托管C++到C语言的DLL需要额外的描述,但是坏的TIG是GNUW32编译器,QT需要编译库代码,并且更少的支持是可接受的。我会根据帖子的标题批准你的答案。设计师的问题是我写“不要做”这句话的原因之一。