使用SWIG从C ++生成C#接口

时间:2014-09-08 23:31:59

标签: c# c++ interface mocking swig

如何使用SWIG从C ++使用SWIG生成C#接口(或至少是C#模拟基类)?

假设:

C ++:

class IWidget
{
public:
     virtual void Flob() = 0;
};

class Widget : public IWidget
{
public:
     void Flob() {};
};

我想输出C#:

public interface IWidget
{
     void Flob();
}

public class Widget : IWidget
{...}

注意:解决方案不一定是一个接口,但我需要能够使用模拟框架(如Moq或Rhino.Mocks)来模拟C#Widget类的基础。我的尝试只产生了生成的C#而没有公共构造函数。

2 个答案:

答案 0 :(得分:1)

您可以使用以下一个或多个来获取列出的输出:

  • csclassmodifiers
  • 在纯虚方法上使用%ignore,使用cscode添加必要的方法声明。
  • csinterfaces typemap
  • csinterfaces_derived typemap

然而,这可能不是实现使您的类可模拟的目标的最简单方法。如果未使用interface,请考虑扩展您的帖子以清楚地确定实现此目的所需的c#。

另请看一下这篇文章:http://swig.10945.n7.nabble.com/Multiple-inheritance-and-C-any-easy-workarounds-available-td11516.html

对不起,我无法提供实际的代码答案,希望上面的内容能帮助您。

答案 1 :(得分:-2)

开始

Swig tutorial

“接口文件”然后“构建一个C#模块”就是那里的东西。下面提到了同一文档中的编译/链接。在Visual Studio中执行相同的操作。

$ swig -csharp  example.i
$ gcc -c -fpic  example.c example_wrap.c
$ gcc -shared example.o  example_wrap.o   -o libexample.so
$ cscc -o runme *.cs