2

おはようございます。誰か助けてください。私は必死です。

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 
4

1 に答える 1

0

------------ 解決済み ------------

うーん、私は私の問題のポイントを見つけました。Linker -> Input -> Additional Dependences に含まれる python lib フォルダーを次の構文 (必要. )で持っていました。

C:\Python33\libs\*.*

これを VC++ ディレクトリ -> ライブラリ ディレクトリ に次の構文で配置すると:

C:\Python33\libs

いきなり効きます。違いはわかりませんが、機能し、重要です。お騒がせしてすみません。

于 2013-04-14T18:07:26.667 に答える