C ++代码加上C#GUI

时间:2015-10-02 13:11:12

标签: opencv dll service c++-cli tesseract

我正在制作使用tesseract,opencv,SDL,自动文字以及将来可能使用C ++编写的其他库的程序。什么是我能做的最好的GUI(MFC,C ++ / CLI,ATL,WTL,C#) - 最快的开发? tesseract,opencv,SDL库是在未经管理的或托管的C ++上编写的吗?有没有办法在C ++上编写非托管库,以便在C ++ / CLR或C#中使用?我也听说过像#34;服务"。它们是否允许语言和GUI开发的组合,哪个更好(或者更快开发) - > dll还是服务?

1 个答案:

答案 0 :(得分:2)

你的问题非常广泛,因此我将重点关注一些重点:

  1. C和C ++库可以在C ++ / CLI中使用

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

  3. .NET中基本上有2个GUI框架:WPF和Windows Forms。甚至可以直接从C ++ / CLI使用Windows Forms,但是:不要这样做!而是:

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

    // 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()