为什么SWIG C#重载失败?

时间:2015-05-11 19:12:29

标签: c# c++ .net inheritance swig

所以有一个simple code in C++。拥有一个C ++库:

class A{
public:
    virtual void Call();
    virtual void CallCall();
    virtual ~A();
};

一个swig文件:

%{
#include "A.h"
%}

%include "A.h"

%module(directors="1") TestSWIG;

%feature("director") A;

调用SWIG生成器后,将生成的C ++和C#文件包含到相关项目中并重建所有项目。

  

swig.exe -c ++ -csharp -namespace TestSWIG -outdir ./Sharp/TestSWIG -o ./TestSWIG.cxx TestSWIG.i

我们希望使用简单的C#.Net代码:

using System;
using TestSWIG;

namespace ASharp {
    class Cassa : A{
        public override void Call() {
            Console.WriteLine("Hello from C#");
        }
    }

    class Program {
        private static void Main(string[] args) {
            var c = new Cassa();
            c.CallCall();
            Console.ReadLine();
        }
    }
}

然而,我们看到C ++实现是被称为

的实现
void A::Call() {
    std::cout << "Hello from C++ World!" << std::endl;
}

现在的问题是:我做错了什么,以便继承和虚函数不起作用?

1 个答案:

答案 0 :(得分:5)

答案是......查看Swig-&gt;示例!=)问题在于在.i文件中进行排序。

%module(directors="1") TestSWIG; // Module name

// Source code refrence
%{
#include "A.h"
%}

%feature("director") A; // objects to support inheritance
%include "A.h" // main file to parse

并且按要求工作!=)