为什么 SWIG C# 重载失败?

Why SWIG C# overloads fail?

所以有 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;
}

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

答案是...查看 Swig->Examples!=)问题出在 .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

它按要求工作了!=)