私はswigによってc++コードをpythonに移植しようとしています。
py、pyd、cxx、libファイルの作成が終了したら、Python(コマンドライン)で「moduleDnld」と入力すると、次のように表示されます->インポートエラー:動的モジュールでinit関数が定義されていません。以下は私のコードです、
さらに:誤解を避けるためにビルドステップを追加してください、MarkTolonenに感謝します
- [ファイル]->[新規]->[プロジェクト]->[Windowsコンソールアプリケーション]->[DLL]を選択し、プロジェクトを空にします(Unicodeなし)
- SerialCommフォルダーをプロジェクトに追加します(DownloaderEngine.h Serial.h PortEnumerator.hなどを含みます)。
- 構成プロパティ->c/ c++->追加のインクルードディレクトリ->C:\ Python27 \ include
- 構成プロパティ->リンカー->一般->出力ファイル->$(OutDir)\ Dnld.pyd
- 構成プロパティ->リンカー->入力->追加のインクルードディレクトリ->C:\ Python27 \ libs\python27.libおよび。\SerialComm\ setupapi.lib
- Dnld.iを追加し、カスタムビルドを実行します
- Dnld.iプロパティページ->コマンドライン->swig-c ++ -python $(InputPath)
- Dnld.iプロパティページ->出力->$(InputName)_warp.cpp
- ビルド、作成Dnld_wrap.cxx、Dnld.py
- プロジェクトにDnld_wrap.cxxを追加し、すべてを再構築し、Dnld.pydを作成します。これで完了です。
(環境:VC2008を使用したXP SP3)
//DownloaderEngine.h
class __declspec(dllexport) CDownloaderEngine
{
public:
CDownloaderEngine();
virtual ~CDownloaderEngine();
signed char OpenPort(signed char _ucPort, unsigned long _ulBaudRate, unsigned char _ucParity,
unsigned char _ucStopBits,unsigned char _ucData);
....
};
//DownloaderEngine.cpp
CDownloaderEngine::CDownloaderEngine()
{
....
}
CDownloaderEngine::~CDownloaderEngine()
{
....
}
//DownloaderEngine.i
%module Dnld
%include <windows.i>
%include <std_vector.i>
%include <std_map.i>
%{
#define SWIG_FILE_WITH_INIT
#include ".\SerialComm\DownloaderEngine.h"
%}
/* Parse the header file to generate wrappers */
%include ".\SerialComm\DownloaderEngine.h"