В настоящее время я пишу набор функций-оболочек Qt4 для приложения в качестве плагина (потому что лично я считаю, что написание расширений в простом C легче осуществить).
Сначала я подумал, что это может бытьделается путем простого абстрагирования следующего:
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication* app = new QApplication(argc, argv);
QPushButton* hello = new QPushButton("Hello world!");
hello->resize(500, 300);
hello->show();
return app->exec();
}
В это (на самом деле, это код в main.c моей оболочки):
#include "bind.h"
int main(int argc, char* argv[])
{
gui_application_t* app;
gui_pushbutton_t* hello;
app = gui_application_new(argc, argv);
hello = gui_pushbutton_new("Hello World");
gui_pushbutton_resize(hello, 100, 30);
gui_pushbutton_show(hello);
return gui_application_exec(app);
}
Пока работает первое(как и ожидалось), я получаю ошибки сегментации в очевидно случайных местах в последнем.Я надеялся, что моя версия будет делать то же самое, что и предыдущая ... но я боюсь, что это совсем не так: - (
После запуска бинарного файла обычно выводится:
*** GUI Debug: gui_application_new: ctx->app = hex_addr
*** GUI Debug: gui_pushbutton_new: ctx->button = hex_addr
*** GUI Debug: gui_pushbutton_resize: ctx->button = hex_addr
*** GUI Debug: gui_pushbutton_show: ctx->button = hex_addr
Segmentation fault
Однако, даже после удаления вызовов на gui_pushbutton_*
(и только вызовы gui_application_new
и gui_application_exec
), приложение все равно будет аварийно завершать работу, но в gui_application_exec
.
Вывод из запускабинарный с GDB: http://codepad.org/wBifH1B2
Источники: http://dl.dropbox.com/u/863332/wrapper.tar.bz2
Любая помощь очень ценится, так как это меня очень озадачило ...