The MASM Forum Archive 2004 to 2012

General Forums => The Workshop => Topic started by: ravi on May 02, 2005, 09:01:38 PM

Title: error :in iczlione's example multithread ex not working!
Post by: ravi on May 02, 2005, 09:01:38 PM
hi ,
     i was studying iczelione's help file and whn i tried to run that profram there was error -->
   
Error A2137 : too few arguments to INVOKE

what z the prob
i just copied n pasted
whn i tried to download the example  the link was not available

ny idea yet i know there may b mistake in calling invoke with right  params yet
i m not at the level i can find it
well i think there r ppl for whom it's child's play


Title: Re: error :in iczlione's example multithread ex not working!
Post by: mnemonic on May 02, 2005, 09:57:02 PM
The code you are using would be nice, proper english appreciated and if you tell which number the tutorial has I'll post you some code.
Title: Re: error :in iczlione's example multithread ex not working!
Post by: pbrennick on May 02, 2005, 10:37:41 PM
ravi,
I feel you must be talking about tut15 or tut16 as these are the two multithreading examples.  Well, both of those tutorials assemble and run with no errors so we will need more information from you.

Paul
Title: example 15 multithread ex coding also pasted
Post by: ravi on May 03, 2005, 06:44:42 PM
here goes the code

386
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.const
IDM_CREATE_THREAD equ 1
IDM_EXIT equ 2
WM_FINISH equ WM_USER+100h

.data
ClassName db "Win32ASMThreadClass",0
AppName  db "Win32 ASM MultiThreading Example",0
MenuName db "FirstMenu",0
SuccessString db "The calculation is completed!",0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hwnd HANDLE ?
ThreadID DWORD ?

.code
start:
    invoke GetModuleHandle, NULL
    mov    hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    push  hInst
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_WINDOW+1
    mov   wc.lpszMenuName,OFFSET MenuName
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,300,200,NULL,NULL,\
           hInst,NULL
    mov   hwnd,eax
    invoke ShowWindow, hwnd,SW_SHOWNORMAL
    invoke UpdateWindow, hwnd
    .WHILE TRUE
            invoke GetMessage, ADDR msg,NULL,0,0
            .BREAK .IF (!eax)
            invoke TranslateMessage, ADDR msg
            invoke DispatchMessage, ADDR msg
    .ENDW
    mov     eax,msg.wParam
    ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    .IF uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL
    .ELSEIF uMsg==WM_COMMAND
        mov eax,wParam
        .if lParam==0
            .if ax==IDM_CREATE_THREAD
                mov  eax,OFFSET ThreadProc
                invoke CreateThread,NULL,NULL,eax,\
                                        0,\
                                        ADDR ThreadID
                invoke CloseHandle,eax
            .else
                invoke DestroyWindow,hWnd
            .endif
        .endif
    .ELSEIF uMsg==WM_FINISH
        invoke MessageBox,NULL,ADDR SuccessString,ADDR AppName,MB_OK
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor    eax,eax
    ret
WndProc endp

ThreadProc PROC USES ecx Param:DWORD
        mov  ecx,600000000
Loop1:
        add  eax,eax
        dec  ecx
        jz   Get_out
        jmp  Loop1
Get_out:
        invoke PostMessage,hwnd,WM_FINISH,NULL,NULL
        ret
ThreadProc ENDP

end start



copy paste n run

sum tims  i wonder if MS would not have invented CUt COPY PASTE ,had computers been so much successful !!!!!!!!!!!
 
Title: Re: error :in iczlione's example multithread ex not working!
Post by: pbrennick on May 03, 2005, 07:09:46 PM
ravi,
There is no question that the example assembles just as you say it does, but the code appears to be modified and since you do not attach the zip of the tutorial; I can only tell you what has been modified.  If it is the zip that has been modified then you should re-download it.

This is the offending line:

invoke CreateThread,NULL,NULL,eax,\
0,\
ADDR ThreadID


This is what it should be:

invoke CreateThread,NULL,NULL,eax,\
NULL,NORMAL_PRIORITY_CLASS,\
ADDR ThreadID


hth:
Paul
Title: Re: error :in iczlione's example multithread ex not working!
Post by: ravi on May 03, 2005, 07:40:43 PM
Thanks Paul
problem solved

working properly

Title: Re: error :in iczlione's example multithread ex not working!
Post by: pbrennick on May 03, 2005, 07:46:58 PM
ravi,
No problem, I just downloaded Donkey's help file which you are using and I see that Donkey did a b-a-a-a-a-a-d thing.  Delete that file and get the tutorials from iczelions site, he also has nce documentation so I don't think you will miss that help file.

Paul