2015-05-11 51 views
3

所以有一個simple code in C++。由於採用了具有C++庫:爲什麼SWIG C#重載失敗?

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

而痛飲文件:

%{ 
#include "A.h" 
%} 

%include "A.h" 

%module(directors="1") TestSWIG; 

%feature("director") A; 

叫痛飲發生器,包括生成的C++和C#文件到相關項目和重建所有項目之後。

swig.exe -C++ -csharp - 命名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

'A'沒有任何命名空間中的C++世界 – DuckQueen

回答

3

答案是...查看Swig->示例!=)問題在於在.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 

和它的工作要求!=)