здравствуйте! помогите, пожалуйста, отловить ошибку: код на fasm: Код (Text): ; +-------------------------------------------+ ; | Program ...... FASMCam | ; | Author ....... Marcus Araujo | ; | Description .. this application shows how | ; | to access webcam via FASM. | ; +-------------------------------------------+ format PE GUI 4.0 entry codestart include 'C:\fasm\INCLUDE\win32a.inc' IDD_MAIN = 100 WM_CAP_DRIVER_CONNECT = WM_USER + 10 WM_CAP_DRIVER_DISCONNECT = WM_USER + 11 WM_CAP_FILE_SAVEDIB = WM_USER + 25 WM_CAP_SET_PREVIEW = WM_USER + 50 WM_CAP_SET_PREVIEWRATE = WM_USER + 52 WM_CAP_SET_SCALE = WM_USER + 53 ID_START = 201 ID_STOP = 202 ID_CLICK = 203 _camtitle db 'FASMWEBCAM' _filename db 'IMAGE.BMP' ; Filename nDevice dd 0 ; Device Number -> It can range from 0 through 9 nFPS dd 100 ; Frames per second. Must be 1000/FPS. E.g. 20 FPS = 50 section '.data' data readable writeable hInstance dd ? hWebcam dd ? section '.code' code readable executable codestart: invoke GetModuleHandle, 0 mov [hInstance], eax invoke DialogBoxParam, eax, IDD_MAIN, HWND_DESKTOP, MainDlg, 0 invoke ExitProcess, 0 proc MainDlg hdlg, msg, wparam, lparam push ebx esi edi cmp [msg], WM_INITDIALOG je .wminitdlg cmp [msg], WM_COMMAND je .wmcommand cmp [msg], WM_CLOSE je .wmclose xor eax, eax jmp .finish .wminitdlg: invoke capCreateCaptureWindow, _camtitle, WS_VISIBLE + WS_CHILD, 10, 10,\ 266, 252, [hdlg], 0 mov [hWebcam], eax jmp .finish .wmcommand: cmp [wparam], BN_CLICKED shl 16 + ID_START je .startbutton cmp [wparam], BN_CLICKED shl 16 + ID_STOP je .stopbutton cmp [wparam], BN_CLICKED shl 16 + ID_CLICK je .clickbutton .wmclose: invoke SendMessage, [hWebcam], WM_CAP_DRIVER_DISCONNECT, _camtitle, 0 invoke EndDialog, [hdlg], 0 .finish: pop edi esi ebx ret .startbutton: invoke SendMessage, [hWebcam], WM_CAP_DRIVER_CONNECT, [nDevice], 0 invoke SendMessage, [hWebcam], WM_CAP_SET_SCALE, TRUE, 0 invoke SendMessage, [hWebcam], WM_CAP_SET_PREVIEWRATE, [nFPS], 0 invoke SendMessage, [hWebcam], WM_CAP_SET_PREVIEW, TRUE, 0 jmp .finish .stopbutton: invoke SendMessage, [hWebcam], WM_CAP_DRIVER_DISCONNECT, _camtitle, 0 jmp .finish .clickbutton: invoke SendMessage, [hWebcam], WM_CAP_FILE_SAVEDIB, 0, _filename jmp .finish endp section '.idata' import data readable writeable library kernel, 'KERNEL32.DLL',\ user, 'USER32.DLL',\ avicap, 'AVICAP32.DLL' import kernel,\ GetModuleHandle,'GetModuleHandleA',\ ExitProcess, 'ExitProcess' import user,\ DialogBoxParam, 'DialogBoxParamA',\ EndDialog, 'EndDialog',\ SendMessage, 'SendMessageA' import avicap,\ capCreateCaptureWindow, 'capCreateCaptureWindowA' section '.rsrc' resource data readable directory RT_DIALOG, dialogs resource dialogs,\ IDD_MAIN, LANG_ENGLISH + SUBLANG_DEFAULT, main_dialog dialog main_dialog, 'FASM Webcam', 0, 0, 190, 200, WS_CAPTION + WS_POPUP + WS_SYSMENU +\ DS_MODALFRAME + DS_CENTER dialogitem 'BUTTON', 'START', ID_START, 10, 170, 50, 20, WS_VISIBLE + WS_TABSTOP dialogitem 'BUTTON', 'STOP', ID_STOP, 70, 170, 50, 20, WS_VISIBLE + WS_TABSTOP dialogitem 'BUTTON', 'CLICK', ID_CLICK, 130, 170, 50, 20, WS_VISIBLE + WS_TABSTOP enddialog код на masm: Код (Text): .386 .model flat,stdcall option casemap:none ; --------------- Includes include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc include \masm32\include\vfw32.inc include \masm32\include\comdlg32.inc include \masm32\include\advapi32.inc ; --------------- Libraries includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\vfw32.lib includelib \masm32\include\comdlg32.lib includelib \masm32\include\advapi32.lib plgproc PROTO:DWORD,:DWORD,:DWORD,:DWORD .const webcam equ 1000 star equ 1001 stop equ 1002 click equ 1003 WM_CAP_DRIVER_CONNECT = WM_USER + 10 WM_CAP_DRIVER_DISCONNECT = WM_USER + 11 WM_CAP_FILE_SAVEDIB = WM_USER + 25 WM_CAP_SET_PREVIEW = WM_USER + 50 WM_CAP_SET_PREVIEWRATE = WM_USER + 52 WM_CAP_SET_SCALE = WM_USER + 53 .data camtitle db "masmcam",0 filename db "image.bmp",0 ndevice dd 0 nfps dd 100 dlgmame db "webcam",0 .data? hInstance dd ? hWebcam dd ? ; --------------- Code section .code start: invoke GetModuleHandle,0 mov hInstance,eax invoke DialogBoxParam, hInstance,1000,0,addr plgproc,0 invoke ExitProcess,0 plgproc proc hwnd:HWND,umsg:UINT, wparam:WPARAM,lparam:LPARAM .if umsg==WM_INITDIALOG ;ЗДЕСЬ ОШИБКА В СЛЕДУЮЩЕЙ СТРОКЕ!, Всё компилируется, exe создается, но не запускается. Функция capCreateCaptureWindow не находит vfw32.dll (файл есть, (прога на fasm работает), ;в папку с программой vfw32.dll клал) В файле vfw32.inc её импорт прописан. invoke capCreateCaptureWindow,addr camtitle,WS_VISIBLE + WS_CHILD,10,10,266,252,addr hwnd,0 .elseif umsg==WM_CLOSE invoke EndDialog, hwnd,NULL .else mov eax,0 ret .endif mov eax,1 ret plgproc endp ;файл ресурсов comment ' my_cam.rc #define webcam 1000 #define star 1001 #define click 1003 #define stop 1002 webcam DIALOGEX 10,10,264,171 CAPTION "IDD_DLG" FONT 8,"MS Sans Serif",0,0,0 LANGUAGE 9,1 STYLE 0x10CF0000 BEGIN CONTROL "START",star,"Button",0x50010000,18,108,60,30 CONTROL "CLICK",click,"Button",0x50010000,186,108,60,30 CONTROL "STOP",stop,"Button",0x50010000,96,111,60,30 END ' end start
по всей видимости ошибка в vfw32.lib(69.8 кб) из поставки masm32, так как заменив её на версию из поставки Peles (vfw32.lib -30.3 кб), всё заработало. fasm как-то импортирует функцию capCreateCaptureWindow из avicap32.dll... в аттаче рабочие asm., rc., exe.
с вашей помощью, товарищи, продолжу искать ответы на пути постижения asma: 1. почему некоторые исходники (например, тот который выше в аттаче my_cam.rar) не хотят компилиться с флешки? (возникает ошибка, описанная в #1 ) 2. где найти файл ObjMem32.lib, который должен быть в составе ObjAsm32 (v.4.1) ? (его там нет, а без него не компилятся примеры) 3. где (как) найти описания функций, входящих в библиотеки в C:\masm32\lib ? (я так понимаю, что они не все из MDSN, но и из С, и ещё откуда-то) 4. как fasm линкует без lib? 5. можно (и нужно ли?) приспособить сишные .lib ы (про .dll читал, что сложно, но можно. А из сишной .lib при помощи inc2l.exe создать .inc не получилось) к masm32 или в msvcrt.lib (и других/ каких? либах из C:\masm32\lib) уже все сишные функции есть?
50 человек просмотрело пост и никто ничего не знает? Может, вопросы слишком сложные, объёмные или глупые?
Такие вопросы обычно самостоятельно разрешаются. И вопрос должен быть интересным иначе возможно никто и не ответит.
Дабы не плодить много новых тем, спрошу здесь. Подскажите пожалуйста, почему не конвертируется фасм в масм? В чем может быть ошибка? FASM code: MASM code: Файл компилируется, но не показывает msgbox c требуемым текстом. В чем ошибка? Жирным шрифтом я выделил возможно проблемные места - то, что не до конца знаю в Фасм, может быть я криво конвертировал это в Масм.
>Invoke InternetReadFile,eax,addr FileBuffer,128,BytesRead offset BytesRead нужно >mov eax,offset BytesRead mov eax, dword ptr [BytesRead] больше не смотрел dword [](FASM) = dword ptr [](MASM) variable(FASM) = offset variable(MASM)
Подскажите еще пожалуйста, как перевести с Фасм в Масм такое: Код (Text): ..... stdcall WIRandom,5,20 ...... proc WIRandom rmin:dword,rmax:dword Т.е. идет вызов процедуры, которой передается два параметры. На Масме - я пробовал прописывать прототип в секции .data как Код (Text): WIRandom PROTO :DWORD,:DWORD А потом Код (Text): push offset rmax push offset rmin call WIRandom WIRandom PROC Но все равно не работает. В чем может быть причина? Ошибка - conflicting parametr definition
Blackbeam, не работает, та же ошибка что и при call. эти инклуды у меня есть. Изменил процедуру на Код (Text): WIRandom PROC rmin:DWORD,rmax:DWORD - все равно не работает ничего.