Ich versuche, meinen C++-Code mit Swig nach Python zu portieren.
Wenn ich die py-, pyd-, cxx- und lib-Dateien fertiggestellt habe, gebe ich unter Python (Kommandozeile) "module Dnld" ein und es erscheint-> Importfehler: Dynamisches Modul definiert keine init-Funktion . Der folgende Code ist mein Code,
Weiter: Meinen Arbeitsschritt hinzufügen, um Missverständnisse zu vermeiden, danke Mark Tolonen
- Datei->Neu->Projekt->Windows-Konsolenanwendung-> DLL und leeres Projekt auswählen (kein Unicode)
- Fügen Sie meinen SerialComm-Ordner zum Projekt hinzu (schließen Sie DownloaderEngine.h Serial.h PortEnumerator.h, etc. ein).
- Konfigurationseigenschaften->c/c++->Zusätzliche Include-Verzeichnisse-> C:\Python27\include
- Konfigurationseigenschaften->Linker->Allgemein->Ausgabedatei->$(OutDir) \Dnld.pyd
- Konfigurationseigenschaften->Linker->Eingabe->Zusätzliche Include-Verzeichnisse-> C:\Python27 \libs\python27.lib und . \SerialComm\setupapi.lib
- Dnld.i hinzufügen, benutzerdefinierten Aufbau durchführen
- Dnld.i Eigenschaftsseite->Befehlszeile->swig -c++ -python $(InputPath)
- Dnld.i Eigenschaft page->Output->$(InputName)_warp.cpp
- bauen, erstellen Dnld_wrap.cxx, Dnld.py
- Dnld_wrap.cxx in mein Projekt einfügen, alles neu erstellen, Dnld.pyd erstellen, das war's
(Umgebung: XP SP3 mit VC2008)
//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"