我正在尝试通过 swig 将我的 c++ 代码移植到 python。
当我完成构建 py、pyd、cxx 和 lib 文件时,在 Python(命令行)下,我键入“module Dnld”,它显示-> import error:dynamic module does not define init function。以下是我的代码,
进一步:添加我的构建步骤以避免误解,谢谢 Mark Tolonen
- 文件->新建->项目->Windows控制台应用程序->选择DLL和空项目(无unicode)
- 将我的 SerialComm 文件夹添加到项目中(包括 DownloaderEngine.h Serial.h PortEnumerator.h 等)。
- 配置属性->c/c++->附加包含目录->C:\Python27\include
- 配置属性->链接器->常规->输出文件->$(OutDir)\Dnld.pyd
- 配置属性->链接器->输入->附加包含目录->C:\Python27\libs\python27.lib and .\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,就这样
(环境:XP SP3 with 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"