zoukankan      html  css  js  c++  java
  • C++/CLI 包装总结 (也许叫备忘更好)

          最近在搞一个C++项目的包装工作,原项目是个native c++的项目(还是个从linux下移过来的),包装的目地是打算 在.net下(或者说是在C#中)使用这些C++的类和它们的方法。 包装工作的第一步,先找出原C++项目中的public class和public method. 其实它们大多被定义.h文件中,所以把头文件 拷贝过来是个不错的办法。然后在class前上ref 把它变成managed class. 模板如下:

    代码
    #include "..\cppclass.h"

    #pragma once

    using namespace System;
    using namespace System::Text;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Data;
    using namespace System::Runtime::InteropServices;

    namespace CppCLI
    {
    public ref class CppClass
    {
    private:
    ::CppClass
    * _native;

    public:
    CppClass(::CppClass
    * native)
    {
    _native
    = native;
    }

    ::CppClass
    * native()
    {
    return _native;
    }

    CppClass ()
    {
    _native
    = new ::CppClass();
    }

    ~CppClass ()
    {
    delete _native;
    }

    int ok ()
    {
    return _native -> ok();
    }
    };
    }

    *注意:如原class没有命名空间, 使用::表示global.

    模板有了,很多简单的方法(参数和返回值类型简单,如int add(int a, int b); )就可以包装了。
    在包装的过程中,很快就会发现其实很多方法不是那么简单,如:
    int add(int *a, int n);
    void add(int a, int b, int &c);
    int add(ClassA* a, ClassB* b);
    ClassC* add(ClassA* a, ClassB* b);
    int add(ClassA* a, ClassB* b, ClassC &c);
    void print(const char* s);
    int report(ostream &os);
    是不是看着有点眼花?不要紧!让我们一个一个来搞定它!(未完待续)

    完整解决方案下载:CppCLI.zip

  • 相关阅读:
    bzoj1101 [POI2007]Zap
    bzoj2648/2716 kdtree
    bzoj2850巧克力王国
    【bzoj1193】[HNOI2006]马步距离
    bzoj 4401 块的计数 思想+模拟+贪心
    【bzoj2751】[HAOI2012]容易题(easy) 数论,简单题
    Ubuntu分区小知识与分区方案
    Ubuntu16.04安装x11VNC远程桌面
    Ubuntu用户权限管理(chown, chmod)
    Ubuntu新建用户组
  • 原文地址:https://www.cnblogs.com/zhongzf/p/1793848.html
Copyright © 2011-2022 走看看