おはようございます。誰か助けてください。私は必死です。
C++ クラスを Python に移行するための基本的な例を作成しました。C++ -> JAVA から正常に変換されましたが、今は Python で必要です。私はWindows 8のVisual Studio 2010でそれを行います(Windows 7 32ビットでも試しました)。すべてが機能し、.py が生成され、.pyd も生成されましたが、python プログラムを実行するとクラッシュします。これは、プログラムの動作停止 (従来の Windows ウィンドウ) を書き込みます。ライブラリのロード時にちょうどクラッシュすることがわかりました。それはこの行です:
_mod = imp.load_module('_KatanaWrapper', fp, pathname, description)
しかし、このファイル全体が SWIG から生成されているので、何か問題があるとは思いません。それはSWIGで何かに違いない?誰か知っていますか?
ここの説明と同様の方法でそれを行います
編集 2x: これは私の C++ コードです。大丈夫です...とてもシンプルで、C++で動作します。
Test.h
#pragma once
class Test
{
public:
Test(void);
~Test(void);
int mySum(int first, int second);
};
Test.c
#include "Test.h"
Test::Test(void)
{
}
int Test::mySum(int first,int second) {
return first + second;
}
Test::~Test(void)
{
}
編集:そして、ここに私のインターフェースファイルがあります(特別なものはありません):
/* File : translate.i */
%module KatanaWrapper
%{
/* Includes the header in the wrapper code */
#include "Test.h"
%}
/* Parse the header file to generate wrappers */
%include "Test.h"
そして、これのコマンドライン:
$(SolutionDir)\..\swig\swig.exe -c++ -python %(FullPath)
編集:興味深いのは、このコマンドを
$(SolutionDir)\..\swig\swig.exe -c++ -java %(FullPath)
生成されたクラスパッケージ(パッケージtestapplication;)に書き込む必要がありますが、それでも機能しません(Javaがクラッシュします)が、コマンドを次のように変更すると:
$(SolutionDir)\..\swig\swig.exe -c++ -java -package testapplication %(FullPath)
できます!PYTHONに似たものはありますか?これを助けることができますか?
これは、VS によって生成されるコンパイラ オプションです。少し混沌としていて、Java のインクルードもあります (Java の移行用)。
/I"C:\Program Files (x86)\Java\jdk1.7.0_17\include\win32" /I"C:\Program Files (x86)\Java\jdk1.7.0_17\include" /I"C:\Python27\include" /I"C:\Python33\include" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "KATANAWRAPPER_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\_KatanaWrapper.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue