私は、複数のdll C++ DLLをそれぞれの元のC++ dllを別のC#dllでラップしようとC#でラップするプロジェクトに取り組んでいます。私は、C++ライブラリAのいくつかの共通シンボルがC++ライブラリBとCで使用されている場合、ラップすることは不可能であるという問題に遭遇しました。これはC++の非常に頻繁なシナリオであるため、私は明らかに何かが間に合わないと思います。数日を過ごしても、私はまだ失われており、どのように進むべきかについての助けに感謝します。クラスPoint ライブラリで定義されるようになっている - - ライブラリで定義されているものとするクラスQuadrange - クラストライアングルは、ライブラリBに定義されていることになっている を使用しています は:複数のC++ .dllを複数のC#.dllでラップする
次の簡単なサンプルでは、問題を再現します
"MyPoint.h"
class MyPoint
{
public:
MyPoint(double theX, double theY) : myX(theX), myY(theY) {}
double X() const { return myX; }
double& X() { return myX; }
double Y() const { return myY; }
double& Y() { return myY; }
private:
double myX;
double myY;
};
"MyTriangle.h"
#include "MyPoint.h"
class MyTriangle
{
public:
MyTriangle(const MyPoint& theP1, const MyPoint& theP2, const MyPoint& theP3) :
myP1(theP1),
myP2(theP2),
myP3(theP3) {}
MyPoint P1() const { return myP1; }
MyPoint& P1() { return myP1; }
MyPoint P2() const { return myP2; }
MyPoint& P2() { return myP2; }
MyPoint P3() const { return myP3; }
MyPoint& P3() { return myP3; }
private:
MyPoint myP1;
MyPoint myP2;
MyPoint myP3;
};
"MyQuadrangle.h"
#include "MyPoint.h"
class MyQuadrangle
{
public:
MyQuadrangle(const MyPoint& theP1, const MyPoint& theP2, const MyPoint& theP3, const MyPoint& theP4) :
myP1(theP1),
myP2(theP2),
myP3(theP3),
myP4(theP4) {}
MyPoint P1() const { return myP1; }
MyPoint& P1() { return myP1; }
MyPoint P2() const { return myP2; }
MyPoint& P2() { return myP2; }
MyPoint P3() const { return myP3; }
MyPoint& P3() { return myP3; }
MyPoint P4() const { return myP4; }
MyPoint& P4() { return myP4; }
private:
MyPoint myP1;
MyPoint myP2;
MyPoint myP3;
MyPoint myP4;
};
三角形と四角形はそれぞれ3点と4点で設定されています。 したがって、両方のクラス(MyTriangleおよびMyQuadrangle)はMyPointクラスを使用します。 C:swigwin-3.0.10 \ swigwin-3.0.10 \コマンド・ライン・インターフェースは、各ファイルのために書かれた
"MyPoint.i"
%module MyPointWrapper
%{
#include "MyPoint.h"
%}
%include <windows.i>
%include "MyPoint.h"
"MyTriangle.i"
%module MyTriangleWrapper
%{
#include "MyTriangle.h"
%}
%include "MyPoint.i"
%include "MyTriangle.h"
"MyQuadrangle.i"
%module MyQuadrangleWrapper
%{
#include "MyQuadrangle.h"
%}
%include "MyPoint.i"
%include "MyQuadrangle.h"
:自分のインターフェイスファイルを持っている すべての3つのクラスは、クラスのseparately.Forそれぞれに包まれています\ swig -csharp -C++ -namespace geometry -outdir C:\ Geometrics \ MyPointNet \ Generated MyPoint.i C:\ swigwin-3.0.10 \ swigwin-3.0.10 \ swig -csharp -C++ -namespace geometry -I "C :\ Geometrics \ MyPointcpp "-outdir C:\ Geometrics \ MyTriangleNet \ Generated MyTriangle.i C:\ swigwin-3.0.10 \ swigwin-3.0.10 \ swig -csharp -C++ -namespace geometry -I" C:\ Geometrics \ MyPointcpp "-outdir C:\ Geometrics \ MyQuadrangleNet \ Generated MyQuadrangle.i
私はC#でMyPointクラスを使用します。
using System;
using geometry;
namespace Example
{
class Program
{
static void Main(string[] args)
{
MyPoint P = new MyPoint (3, 4, 5);
}
}
}
エラーは、各クラスがMyPointの種類が含まれていることを言うこと表示されます。 タイプは「MyPoint」「MyTriangleNet、バージョン= 1.0.0.0の両方に存在します、Culture = neutral、PublicKeyToken = null ' と' MyPointNet、Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null '
このような状況を回避するにはどうすればよいのですか?それぞれのクラスが別々にラップされるという条件ですか?
私は質問をロールバックしました。あなたが行った編集は、C#/ Windowsの知識が不足しているためにテスト/回答に誤りがあったのですが、あなたの質問には(非常に良い)詳細がありませんでした。インタラクティブなデバッグセッションよりも百科事典のエントリ。 – Flexo