Как сделать код C ++ / wxWidgets доступным для приложения wxPython? - PullRequest
0 голосов
/ 03 июня 2010

У меня есть библиотека кода, написанная на C ++ и широко использующая библиотеку wxWidgets. Сейчас я пытаюсь обернуть мою библиотеку (в настоящее время использующую SWIG), чтобы ее можно было вызывать из wxPython, но я столкнулся со стеной:

------ Build started: Project: MyLibLib, Configuration: Release_SWIG_OutputForBin Win32 ------
Performing Custom Build Step
In order to function correctly, please ensure the following environment variables are correctly set:
PYTHON_INCLUDE: C:\Python26\include
PYTHON_LIB: C:\Python26\libs\python26.lib
d:\MyProject\Software\MyLib\trunk\MyLib>C:\swigwin-2.0.0\swig.exe -python d:\MyProject\Software\MyLib\trunk\MyLibLib\MyLib.i 
d:\MyProject\Software\MyLib\trunk\MyLib>if errorlevel 1 goto VCReportError 
d:\MyProject\Software\MyLib\trunk\MyLib>goto VCEnd 
Compiling...
MyLib_wrap.c
C:\wxWidgets-2.8.10\include\wx/wxchar.h(886) : warning C4273: '_snprintf' : inconsistent dll linkage
        c:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(358) : see previous definition of '_snprintf'
C:\wxWidgets-2.8.10\include\wx/buffer.h(127) : error C2061: syntax error : identifier 'wxCharBuffer'
C:\wxWidgets-2.8.10\include\wx/buffer.h(127) : error C2059: syntax error : ';'
C:\wxWidgets-2.8.10\include\wx/buffer.h(127) : error C2449: found '{' at file scope (missing function header?)
C:\wxWidgets-2.8.10\include\wx/buffer.h(127) : error C2059: syntax error : '}'
C:\wxWidgets-2.8.10\include\wx/buffer.h(127) : error C2059: syntax error : ')'
C:\wxWidgets-2.8.10\include\wx/buffer.h(129) : error C2061: syntax error : identifier 'wxWritableCharBuffer'
C:\wxWidgets-2.8.10\include\wx/buffer.h(129) : error C2059: syntax error : ';'
C:\wxWidgets-2.8.10\include\wx/buffer.h(129) : error C2059: syntax error : ':'
C:\wxWidgets-2.8.10\include\wx/buffer.h(134) : error C2061: syntax error : identifier 'wxWCharBuffer'
C:\wxWidgets-2.8.10\include\wx/buffer.h(134) : error C2059: syntax error : ';'
C:\wxWidgets-2.8.10\include\wx/buffer.h(134) : error C2449: found '{' at file scope (missing function header?)
C:\wxWidgets-2.8.10\include\wx/buffer.h(134) : error C2059: syntax error : '}'
C:\wxWidgets-2.8.10\include\wx/buffer.h(134) : fatal error C1004: unexpected end-of-file found
Build log was saved at "file://d:\MyProject\Software\MyLib\trunk\MyLib\Release_SWIG_OutputForBin\BuildLog.htm"
MyLibLib - 13 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Есть ли особый способ, которым я должен идти об этом? Я потратил некоторое время на поиски похожих ошибок, но не получил ни одного, который бы свидетельствовал о том, что я, вероятно, лаю не то дерево здесь ...?

[Изменить] Является ли dll и ctypes ответом?

[Редактировать] Я попытался включить туда основной заголовок wx, но, похоже, проблема не устранена:

%{
#include <wx/wx.h>
%}

Должен ли я пройти и вручную добавить каждый заголовок из wxWidgets? Имейте в виду, что есть массивных их количество!

1 Ответ

0 голосов
/ 03 июня 2010

Похоже, что ваш Mylib.i не генерирует в сгенерированном C-файле #include заголовок (-и), определяющий wxCharBuffer и т. Д. (Или, возможно, пропускает #define s, которые заставляют включенные элементы фактически выполнять необходимую функцию) определения, но это менее вероятно). У вас есть необходимые

%{
 #include "wxwhatever.h"
%}

и так далее в вашем файле .i? Можете ли вы взглянуть на сгенерированный .c и посмотреть, какие директивы include присутствуют или отсутствуют (или, возможно, в неправильном порядке)?

Нет ничего особенно хитрого (насколько я знаю) в задаче, которую вы пытаетесь выполнить, и эти сообщения об ошибках от компилятора просто подсказывают мне "отсутствующие включения или тому подобное" ...

...