• 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

  • 相关阅读:
    每天学一点MATLAB函数——文件编程函数
    每天学一点MATLAB函数——软件操作函数(1)
    C# 杂记
    ActiveX控件注册与反注册
    First Java Graphic Program
    判断式
    两个仿函数示例
    STL文件的读取与显示
    SQLite数据库(一)
    机器学习--如何理解Accuracy, Precision, Recall, F1 score
  • 原文地址:https://www.cnblogs.com/zhongzf/p/1793848.html
Copyright © 2020-2023  润新知