Fasm + GTK

Fasm + GTK

Сообщение Sektor » Вс июн 05, 2011 11:17 am

Всем привет!
Помогите решить такую проблему, пытаюсь прикрутить GTK к фасму, чтобы создавать оконные приложения, ну и для самообразования.
На Офф. сайте фасма в разделе примеры, нашел примеры использования Gtk с фасмом, но эти примеры настолько устарели, что не захотели компилиться ни в какую...
Немного по шаманив мне удалось скомпилировать примеры, и они заработали(все как надо), но дело в том что для компиляции нужен gcc, а меня это не устраивает:) Хотелось бы использовать для компиляции только фасм.

Узнав в каких DLL-ках содержаться нужные мне функции, я написал вот такой код:
Код: Выделить всё

format PE GUI 4.0 ;пробовал и просто PE

include '%fasminc%/win32a.inc'

entry _main

section '.text' code readable executable

proc _main c argc, argv
locals
hWindow dd ?
hButton dd ?
msg_click_me2 db "click me2", 0
sz_delete_event db "delete_event", 0
sz_destroy db "destroy", 0
sz_clicked db "clicked", 0
endl

lea eax, [argc]
lea ebx, [argv]

ccall _gtk_init, eax, ebx

ccall _gtk_window_new, 0
mov [hWindow], eax

lea eax, [msg_click_me2]
ccall _gtk_button_new_with_label, eax ; msg_click_me
mov [hButton], eax

lea eax, [sz_delete_event]
ccall _g_signal_connect_data, [hWindow], eax, _delete_event, 0, 0, 0
lea eax, [sz_destroy]
ccall _g_signal_connect_data, [hWindow], eax, _destroy, 0, 0, 0
lea eax, [sz_clicked]
ccall _g_signal_connect_data, [hButton], eax, _hello, 0, 0, 0
lea eax, [sz_clicked]
ccall _g_signal_connect_data, [hButton], eax, _gtk_widget_destroy, [hWindow], 0, 2

ccall _gtk_container_add, [hWindow], [hButton]

ccall _gtk_widget_show, [hButton]
ccall _gtk_widget_show, [hWindow]

call _gtk_main
ret
endp

proc _hello c, widget, gdata
locals
msg_hello db "Hello world!", 10, 0
endl
lea eax, [msg_hello]
ccall _g_print, eax
ret
endp

proc _destroy c widget, gdata

call _gtk_main_quit
; ccall _exit, 0
ret
endp

proc _delete_event c widget, event, gdata
locals
msg_delete db "delete event occurred?", 10, 0
endl
lea eax, [msg_delete]
ccall _g_print, eax
mov eax, 1
call _gtk_main_quit
;ccall _exit, 0
ret
endp

;--импорт библиотек
section '.idata' import readable writeable
library kernel, 'kernel32.dll',\
libglib, 'libglib-2.0-0.dll',\
libgobject, 'libgobject-2.0-0.dll',\
libgtk32, 'libgtk-win32-2.0-0.dll'

import kernel,\
ExitProcess, 'ExitProcess'

import libglib,\
_g_print, "g_print"

import libgobject,\
_g_signal_connect_data, "g_signal_connect_data"

import libgtk32,\
_gtk_init, "gtk_init",\
_gtk_window_new, "gtk_window_new",\
_gtk_button_new_with_label, "gtk_button_new_with_label",\
_gtk_main, "gtk_main",\
_gtk_main_quit, "gtk_main_quit",\
_gtk_container_add, "gtk_container_add",\
_gtk_widget_show, "gtk_widget_show",\
_gtk_widget_destroy, "gtk_widget_destroy"



Компилиться - на ура, а вот запускаться не хочет. Помогите пожалуйста разобраться в чем дело?!
(импортируемые функции находяться в тех библиотеках из которых они импортируються)

Заранее всем большое спасибо.
Sektor
наблюдатель
 
Сообщения: 3
Зарегистрирован: Пт июн 03, 2011 9:13 pm

Re: Fasm + GTK

Сообщение xrnd » Чт июн 23, 2011 7:55 pm

Проще всего, наверно, написать аналогичный кусок кода на Си и отладить его.
Я как-то тоже мучился с GTK, правда под Linux. Возможно, какая-то функция инициализации не вызвана, или вызвана не так.
xrnd
автор
 
Сообщения: 133
Зарегистрирован: Вс июл 04, 2010 11:03 pm

Re: Fasm + GTK

Сообщение Sektor » Вс июн 26, 2011 11:19 am

проблему решил, вот исходник с исправлениями:


format PE GUI 4.0 ;пробовал и просто PE

include 'c:/fasm/include/win32a.inc'

entry _main

section '.text' code readable executable

proc _main c
locals
argc db "", 0
argv db "", 0
hWindow dd ?
hButton dd ?
msg_click_me2 db "click me2", 0
sz_delete_event db "delete_event", 0
sz_destroy db "destroy", 0
sz_clicked db "clicked", 0
endl

lea eax, [argc]
lea ebx, [argv]

ccall [_gtk_init], eax, ebx

ccall [_gtk_window_new], 0
mov [hWindow], eax

lea eax, [msg_click_me2]
ccall [_gtk_button_new_with_label], eax ; msg_click_me
mov [hButton], eax

lea eax, [sz_delete_event]
ccall [_g_signal_connect_data], [hWindow], eax, _delete_event, 0, 0, 0
lea eax, [sz_destroy]
ccall [_g_signal_connect_data], [hWindow], eax, _destroy, 0, 0, 0
lea eax, [sz_clicked]
ccall [_g_signal_connect_data], [hButton], eax, _hello, 0, 0, 0
lea eax, [sz_clicked]
ccall [_g_signal_connect_data], [hButton], eax, [_gtk_widget_destroy], [hWindow], 0, 2

ccall [_gtk_container_add], [hWindow], [hButton]

ccall [_gtk_widget_show], [hButton]
ccall [_gtk_widget_show], [hWindow]

call [_gtk_main]
invoke ExitProcess, 0
ret
endp

proc _hello c, widget, gdata
locals
msg_hello db "Hello world!", 10, 0
endl
lea eax, [msg_hello]
ccall [_g_print], eax
ret
endp

proc _destroy c widget, gdata

call [_gtk_main_quit]
invoke ExitProcess, 0
; ccall _exit, 0
ret
endp

proc _delete_event c widget, event, gdata
locals
msg_delete db "delete event occurred?", 10, 0
endl
lea eax, [msg_delete]
ccall [_g_print], eax
mov eax, 1
;call [_gtk_main_quit]
;invoke ExitProcess, 0
;ccall _exit, 0
ret
endp

;--импорт библиотек
section '.idata' import readable writeable
library kernel, 'kernel32.dll',\
libglib, 'libglib-2.0-0.dll',\
libgobject, 'libgobject-2.0-0.dll',\
libgtk32, 'libgtk-win32-2.0-0.dll'

import kernel,\
ExitProcess, 'ExitProcess'

import libglib,\
_g_print, "g_print"

import libgobject,\
_g_signal_connect_data, "g_signal_connect_data"

import libgtk32,\
_gtk_init, "gtk_init",\
_gtk_window_new, "gtk_window_new",\
_gtk_button_new_with_label, "gtk_button_new_with_label",\
_gtk_main, "gtk_main",\
_gtk_main_quit, "gtk_main_quit",\
_gtk_container_add, "gtk_container_add",\
_gtk_widget_show, "gtk_widget_show",\
_gtk_widget_destroy, "gtk_widget_destroy"

тут функция main без аргументов, и почему-то функции из библиотек gtk приходиться вызывать [_gtk_init], почему так?

p.s. закоментированный код - это эксперементы:)
Sektor
наблюдатель
 
Сообщения: 3
Зарегистрирован: Пт июн 03, 2011 9:13 pm

Re: Fasm + GTK

Сообщение xrnd » Сб июл 02, 2011 1:23 am

Отличный исходник, спасибо.
xrnd
автор
 
Сообщения: 133
Зарегистрирован: Вс июл 04, 2010 11:03 pm


Вернуться в Ассемблер в Win32

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron