Страниц: [1]
  Печать  
Автор Тема: ApCreateWidget\ApCreateWidgetFamily и SIGSEGV  (Прочитано 840 раз)
qnx_user
Full Member
***
Offline Offline

Сообщений: 122


Просмотр профиля
« : Июня 14, 2018, 10:45:14 pm »

Код:
#include <Ap.h>
#include <Pt.h>
#include <stdio.h>

char ab_exe_path[PATH_MAX];

void ApClassInit()
{
ApAddClass( "PtWindow", &PtWindow );
ApAddClass( "PtLabel",  &PtLabel );
ApAddClass( "PtLabel",  &PtPane );
}

int main( int argc, char *argv[] )
{
ApDBase_t  *dbase;
PtWidget_t *window;
PtArg_t    args[2];
PtWidget_t *test;
int i;

// PtSetArg( &args[0], Pt_ARG_WINDOW_TITLE, "Window Demo", 0 );
// window = PtAppInit( NULL, NULL, NULL, 1, args );

ApClassInit();
dbase = ApOpenDBaseFile( "base.wgtw" );
if ( NULL == dbase ) {
printf( "Error ApOpenDBaseFile\n" );
}

// Нормально выводит все имена виджетов на печать.
for ( i = 0; i < dbase->wgt_ctr; i++ )
printf( "%s\n", dbase->wgt_list[i]->name );

// SIGSEGV
PtSetArg( &args[0], Pt_ARG_WINDOW_TITLE, "Window Demo", 0 );
window = ApCreateWidget( (ApDBase_t const *)dbase, dbase->wgt_list[0]->name, 0, 0, 1, args );
if ( NULL != window ) {
printf( "PtRealizeWidget( window );\n" );
PtRealizeWidget( window );
}

// SIGSEGV
test = ApCreateWidgetFamily( (ApDBase_t const *)dbase, dbase->wgt_list[1]->name, -1, -1, 0, NULL );
if ( NULL != test ) {
printf( "PtRealizeWidget( test );\n" );
PtRealizeWidget( test );
}

ApCloseDBase( dbase );

PtRealizeWidget( window );
PtMainLoop();

return 0;
}

Подскажите почему вызовы ApCreateWidget и ApCreateWidgetFamily упорно валятся в SIGSEGV, перепробовал множество всяких комбинаций, вроде все по докам делаю. Проект приложил (компилил в OpenWatcom 1.9, в родном QNX4 Watcom 10.6 тоже пытался результат аналогичный).

P.S. Прочитал в доке, что данные функции можно использовать только из приложения сгенерированного в PhAb, а я как-раз таки не хотел пользоваться им, думал использовать его только для формирования базы виджетов, а выдирать их оттуда самостоятельно. Я правильно понимаю что такой возможности нет? Дело в том что все свои проекты под qnx4 собираю из под видны с помощью OpenWatcom (своя структура проектов и тп.),  и не хотелось бы привязываться к PhAb, которым пользоваться возможно только из под QNX4.

Спасибо.
« Последнее редактирование: Июня 15, 2018, 12:45:22 am от qnx_user » Записан
A_O
Full Member
***
Offline Offline

Сообщений: 212


Просмотр профиля
« Ответ #1 : Июня 15, 2018, 09:41:48 am »

Генерировать приложение в PhAB как раз совершенно не обязательно. Ошибка в том, что вы пытаетесь создать главное окно посредством вызова ApCreateWidget. Это нужно делать только через PtAppInit.
Кроме того, у вас ошибка в функции AppClassInit.
PS Привет Охлопкову.
Записан
qnx_user
Full Member
***
Offline Offline

Сообщений: 122


Просмотр профиля
« Ответ #2 : Июня 15, 2018, 10:00:54 am »

Цитата: A_O
Ошибка в том, что вы пытаетесь создать главное окно посредством вызова ApCreateWidget. Это нужно делать только через PtAppInit.
Понял, исправил.

Цитата: A_O
Кроме того, у вас ошибка в функции AppClassInit.
Слона то я и не заметил. Поправил. Спасибо!

Цитата: A_O
PS Привет Охлопкову.
Очень давно не контактировал, пытаюсь разобраться как реализованы некоторые его приложухи.
« Последнее редактирование: Июня 15, 2018, 10:39:57 am от qnx_user » Записан
Страниц: [1]
  Печать  
 
Перейти в: