LINUX.ORG.RU

[gtk][wxDevCpp] gcc переварачивает передаваемые параметры в callback функции

 


0

1

Вынужден написать небольшую программку под офтоп.

Скачал последний glade 3 с gtk, а так же последний wxDevCpp. Создал проект и интерфейс в glade.

Параметры компилятора:

-mms-bitfields
-mwindows
-DHAVE_CONFIG_H
-I"$(GTK_HOME)/include/gtk-2.0"
-I"$(GTK_HOME)/lib/gtk-2.0/include"
-I"$(GTK_HOME)/include/atk-1.0"
-I"$(GTK_HOME)/include/pango-1.0"
-I"$(GTK_HOME)/include/glib-2.0"
-I"$(GTK_HOME)/lib/glib-2.0/include"
-I"$(GTK_HOME)/include/cairo"
-I"$(GTK_HOME)/include"
-DPACKAGE_PREFIX=\"\" -DPACKAGE_DATA_DIR=\"\" -DPACKAGE_LOCALE_DIR=\"\"

Параметры линковщика:

-L"$(GTK_HOME)/lib"
-lgtk-win32-2.0
-lgdk-win32-2.0
-latk-1.0
-lgdk_pixbuf-2.0
-lpangowin32-1.0
-lgdi32
-lpango-1.0
-lgobject-2.0
-lgmodule-2.0
-lglib-2.0

Остальные параметры в wxDevCpp по-умолчанию.

Пытаюсь вызывать callback функции, например:

G_MODULE_EXPORT gboolean
button_click(GtkWidget *widget, GdkEvent  *event, gpointer user_data)
{
	if(event->type == GDK_BUTTON_PRESS){
		GdkEventButton *bevent = (GdkEventButton *) event;
         gtk_menu_popup ((GtkMenu *)user_data, NULL, NULL, NULL, NULL, bevent->button, bevent->time);
	}
	return FALSE;
}

А gcc подставляет в callback функции параметры в обратном порядке (или в gtk dll они в таком порядке). Никак не пойму в чем дело и как поправить. Может можно как-то заставить gcc передавать параметры в обратном порядке?

★★★

Помнится, у всех Windows API функций был соответствующий модификатор - WINAPI. Используется ли он сегодня - не знаю, но попробовать-то стоит :)

anarelian
()
Ответ на: комментарий от anarelian

Гугл говорит WINAPI это:

#define WINAPI __stdcall

Так же я вынужден объявлять G_MODULE_EXPORT в callback функции (судя по документации):


#  define G_MODULE_EXPORT		__declspec(dllexport)

Used to declare functions exported by modules. This is a no-op on Linux and Unices, but when compiling for Windows, it marks a symbol to be exported from the library or executable being built.

Эти два параметра вместе не уживаются. Может у кого еще есть идеи?

Mrak ★★★
() автор топика
Ответ на: комментарий от Mrak

Жаль, что не то оказалось. А Вам точно именно GTK+ так нужен? есть же wxWindows, у которого имеются кроссплатформенные IDE CodeLite && Code::Blocks. Под линуксом оно именно GTK использует, кстати - т.е. обёртка над ним считай. А еще можно просто взять готовый GTK-проект под венду и посмотреть, как они собирали. EasyTag к примеру.

anarelian
()

Было похожее, но не в ДЛЛке. А как вы коллбэк регистрируете? Случайно, не с помощью g_signal_connect_*swapped*()?

gag ★★★★★
()
Ответ на: комментарий от gag

Случайно, не с помощью g_signal_connect_*swapped*()?

В том то и дело что загружаю интерфейс с помощью gtkbuilder, а регистрирую так:

	/* Auto-connect signal handlers */
	gtk_builder_connect_signals (builder, NULL);
Mrak ★★★
() автор топика
Ответ на: комментарий от anarelian

wxWindows - тормозное УГ, разрабов которого покусал MFC

Gorthauer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.