swig / c#:名称空间和模板

SWIG / C# : namespace and templates

本文关键字:空间 swig      更新时间:2023-10-16

我有一个C 库,希望使用swig生成一个不错的包装器,为此,我创建了以下SWIG接口文件,但是我遇到了一些问题:

1-无C#名称空间

2- C 预期类很复杂,我希望在C#中创建自己的包装器(部分类别(,我需要的只是SWIG生成骨架。我将自己提供其余的实施。有没有办法做到这一点 ?(我已经检查了文档。但这还不清楚(。另外,C#类必须是一个通用类,所以我会期望的是预期的,等等...

3-有没有办法强迫Swig生成接口而不是类?(对于C 类iviewhandle(

这是我的.i文件

%module sdk
%{
  #include "../include/sdk/core/Expected.hpp"
  #include "../include/luciadsdk/view/IViewHandle.hpp"
  #include "../include/sdk/view/IViewContext.hpp"
  #include "../include/sdk/view/ViewContext.hpp"
%}
%include <windows.i>
%nodefaultctor;
//--------------------------------------------------
// Expected<T>
//--------------------------------------------------
%nspace sdk::core;
namespace sdk {
namespace core {
  template<typename T>
  class Expected
  {
  public:
  };
  %template(Expected_Int)   Expected<int>;
  %template(Expected_Float) Expected<float>;
  %template(Expected_Bool)  Expected<bool>;
  %template(Expected_Void)  Expected<void>;
} }
//--------------------------------------------------
// IViewHandle
//--------------------------------------------------
%nspace sdk::view;
namespace sdk {
namespace view {
  class IViewHandle
  {
  public:
  };
} }
//--------------------------------------------------
// IViewContext
//--------------------------------------------------
%nspace sdk::view;
namespace sdk {
namespace view {
  class IViewContext
  {
  public:
    virtual sdk::Expected<void> setHandle(const IViewHandle& handle) = 0;
    virtual void invalidate() = 0;
    protected:
      IViewContext() = default;
      ~IViewContext() = default;
  };
} }
//--------------------------------------------------
// ViewContext
//--------------------------------------------------
%nspace sdk::view;
namespace sdk {
namespace view {
  class ViewContext : public IViewContext
  {
  public:
    ViewContext();
    ~ViewContext();
    sdk::Expected<void> setHandle(const IViewHandle& handle) override;
    void invalidate() override;
  };
} }
%clearnodefaultctor;
  1. 对于命名空间,我发现在C#中生成它们的唯一方法是将-namespace添加到Swig包装器中。

喜欢:

swig -namespace myc#nesspace.myc#ohternamespace myfile.i

  1. 我想您能借此帖子找到它。

  2. 我从未找到针对接口的解决方案,因为它在C#和C 中完全不同,