为什么 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
它按要求工作了!=)
所以有 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
它按要求工作了!=)