所以有一个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;
}
现在的问题是:我做错了什么,以便继承和虚函数不起作用?
答案 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
并且按要求工作!=)