In the first example, a new structure is created (with 
Initializedstructure
holding its offset),
and each data element of the structure is filled with an initial value. The second example just tells
masm to reserve memory for the structure, and each data element is set to 0 initially. After creating a
structure you can access it in your code:
mov eax, Initializedstructure.some_word
; eax will hold 10 now
inc UnInitializedstructure.dword1
; the dword1 of the structure is increased by one
This is how this structure would be stored in memory
Memory location
Contents
offset of Initializedstructure
100 (dword, 4 bytes)
offset of Initializedstructure + 4 4 200 (dword, 4 bytes)
offset of Initializedstructure + 8 8 10 (word, 2 bytes)
offset of Initializedstructure + 1065 or 'A' (1 byte)
offset of Initializedstructure + 1190h (1 byte)
12.3 - WNDCLASSEX
Enough about structures for now, let's proceed with RegisterClassEx. In the win32 programmer's
reference you can look up the defintion of the WNDCLASSEX structure.
typedef struct _WNDCLASSEX { // wc 
UINT cbSize; 
UINT style; 
WNDPROC lpfnWndProc; 
int cbClsExtra; 
int cbWndExtra; 
HANDLE hInstance; 
HICON hIcon; 
HCURSOR hCursor; 
HBRUSH hbrBackground; 
LPCTSTR lpszMenuName; 
LPCTSTR lpszClassName; 
HICON hIconSm; 
} WNDCLASSEX;
Explanation:
cbSize
Size of the WNDCLASSEX structure. Used for validation by windows. You can get
this size using SIZEOF: mov ws.cbSize, SIZEOF WNDCLASSEX
style
Specifies the styles for the class (redraw flags, if the window should have a
scrollbar etc.)
lpfnWndProc Pointer to a window procedure (more on this later)
cbClsExtra
Number of extra bytes to allocate following the window class structure. Not
important to us.
cbWndExtra
Number of extra bytes to allocate following the window instance. Also not
important to us.
hInstance
Instance handle of your program. You can get this handle with the
GetModuleHandle function.
hIcon
Handle of an icon resource for the window.
hCursor
Handle of a cursor resource for the window.
hbrBackground
Handle to a brush for painting the background, or one of the standard brush types
like COLOR_WINDOW, COLOR_BTNFACE , COLOR_BACKGROUND.
lpszMenuName
Pointer to a null-terminated string that specifies resource name of the class menu.
This can also be a resource ID.
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
41 / 53
Pdf edit hyperlink - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
adding hyperlinks to pdf documents; add links to pdf acrobat
Pdf edit hyperlink - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
pdf link open in new window; pdf reader link
lpszClassNamePoints to a null-terminated string that specifies the class name for the window.
hIconSm
Handle to a small icon that is associated with the window class.
Create a new folder in your win32 folder called firstwindow and create a new file window.asm in this folder
with the following contents:
.486
.model flat, stdcall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
Then create a .bat file called make.bat. Paste this text into it:
@echo off
ml /c /coff window.asm
link /subsystem:windows window.obj
pause>nul
<view code>
From now on, to save space, only pieces of the full code are displayed, you can click on <view
code> to display the full code at that point in the tutorial. The full code is displayed in a new
window.
12.4 - Registering a class
Now we will register the class in a procedure called WinMain. This procedure contains the window
initialization.
add this to your assembly file:
WinMain PROTO STDCALL :DWORD, :DWORD, :DWORD
.data?
hInstance dd ?
.code
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke WinMain, hInstance, NULL, NULL, SW_SHOWNORMAL
end start
This code will get the handle of the module with getmodulehandle, put the handle in the hInstance
variable. This module handle is used very often in the windows API. Then it calls the procedure
WinMain. This is not an API function, but a procedure we will define now. The prototype is :
WinMain PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD, so a function with 4
parameters.:
<view code>
Now put this code before the end start:
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
42 / 53
How to C#: Basic SDK Concept of XDoc.PDF for .NET
XDoc.PDF for .NET allows C# developers to edit hyperlink of PDF document, including editing PDF url links and quick navigation link in bookmark/outline.
add a link to a pdf in preview; add link to pdf
VB.NET PDF: Basic SDK Concept of XDoc.PDF
XDoc.PDF for .NET allows VB.NET developers to edit hyperlink of PDF document, including editing PDF url links and quick navigation link in bookmark/outline.
adding links to pdf document; adding an email link to a pdf
WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
ret
WinMain endp
You don't have to use this winmain procedure at all, but it's a very common way of initializing your
program. Visual C initializes the parameters of this functions automatically, but we have to do it
ourselves. Don't care about hPrevInst and CmdLine for now, focus on hInst and CmdShow. hInst is
the Instance handle (= module handle), CmdShow is a flag that defines how the window should be
shown. (More on this can be found in the API reference about ShowWindow).
The "invoke WinMain, hInstance, NULL, NULL, SW_SHOWNORMAL" in the previous code calls this
function with the right hInstance and show flag. Now we can write our initialization code in
WinMain:
WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL hwnd:DWORD
ret
WinMain endp
These are the two local variables we will need in this procedure.
.data
ClassName db "FirstWindowClass",0
.code
WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL hwnd:DWORD
; now set all the structure members of the WNDCLASSEX structure wc:
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
mov  wc.lpszMenuName,NULL
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
ret
WinMain endp
Let's see what happens:
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
The size of the structure is initialized (this is required by RegisterClassEx). The style of the class is set
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
43 / 53
VB.NET PDF Library SDK to view, edit, convert, process PDF file
processing images contained in PDF file. Please click to see details. PDF Hyperlink Edit. RasterEdge PDF SDK for .NET package offers
add hyperlink to pdf acrobat; check links in pdf
C# PDF Library SDK to view, edit, convert, process PDF file for C#
processing images contained in PDF file. Please click to see details. C#.NET: Edit PDF Hyperlink. RasterEdge PDF SDK for .NET package
pdf hyperlink; pdf link to specific page
to "CS_HREDRAW or CS_VREDRAW", then the offset of the windows procedure is set. You will
find out what the window procedure is later, for now remember that you need the address of the
WndProc procedure, which you can get with 'offset WndProc'. cbClsExtra and cbWndExtra are not
used by us so set them to NULL.
push hInst
pop  wc.hInstance
The wc.hInstance is set to the hInst parameter of WinMain. Why don't we use: 
mov
wc.hInstance, hInst
? Because the mov instruction does not allow to move from one memory
location to another. With the push/pop method, the value to move is pushed on stack, and than
popped of into the destination.
mov  wc.hbrBackground, COLOR_WINDOW
mov  wc.lpszMenuName, NULL
mov  wc.lpszClassName, OFFSET ClassName
The background color of the class is set to COLOR_WINDOW, no menu is defined (NULL), and the
lpszClassName is set to a pointer to the null-terminated classname-string: "FirstWindowClass". This
should be a unique name defined for your own application.
invoke LoadIcon, NULL, IDI_APPLICATION
mov  wc.hIcon, eax
mov  wc.hIconSm, eax
The window needs an icon, but because we need a handle to an icon, we use LoadIcon to load an
icon and get a handle. LoadIcon has two parameters: hInstance, and lpIconName. hInstance is the
module handle whose executable file contains the icon. lpIconName is a pointer to a string that is the
name of the icon resource or a resource ID. If you use NULL as hInstance, you can choose from some
standard icons. (Which we do because we don't have an icon resource here). hIconSm is the small
icon, you can use the same handle for it.
invoke LoadCursor,NULL,IDC_ARROW
mov  wc.hCursor,eax
Same thing for the cursor, just NULL as hInstance, and a standard cursor type: IDC_ARROW, the
standard windows arrow.
invoke RegisterClassEx, ADDR wc
Now finally register the class using RegisterClassEx with a pointer to the WNDCLASSEX structure
wc as parameter.
<view code>
12.5 - Creating the window
Now you've registered a class you can create a window from it:
HWND CreateWindowEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu, or child-window identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
44 / 53
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
C#.NET edit PDF digital signatures, C#.NET edit PDF sticky note Merge all Excel sheets to one PDF file in VB Change Excel hyperlink to PDF hyperlink and bookmark.
add hyperlink pdf; add link to pdf file
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Able to get word count in PDF pages. Change Word hyperlink to PDF hyperlink and bookmark. Free online Word to PDF converter without email.
add a link to a pdf in acrobat; add email link to pdf
);
dwExStyle and dwStyle are two parameters which determine the style of the window. 
lpClassName is a pointer to your registered classname.
lpWindowName is the name of your window (this will be in the caption of your window if it has
one)
x, y, nWidth, nHeight determine the position and size of your window.
hWndParent is the handle of the window that owns the new window. Can be null if you don't have a
parent window.
hMenu is a handle of a windows menu (discussed in a later tutorial, null for now)
hInstance is the application instance handle
lpParam is an extra value you can use in your program
.data
AppName "FirstWindow",0
.code
INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,400,300,NULL,NULL,\
hInst,NULL
mov hwnd, eax
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
(note that the \-character makes the assembler read to the next line as if it where on the same line.)
Our code will create a new windows, with our classname we've just registered. The title will be
"FirstWindow" (AppName), the style is WS_OVERLAPPEDWINDOW, which is a style that creates
an overlapped window with a caption, system menu, resizable border and a minimize/maximize-
box. CW_USEDEFAULT as x and y position will make windows use the default position for the new
window. The (initial) size of the window is 400x300 pixels.
The return value of the function is the window handle, HWND, which is stored in the local variable
hwnd. Then the window is showed with ShowWindow. UpdateWindow ensures that the window
will be drawn.
12.6 - Message Loop
A window can communicate with your program and other windows using messages. The window
procedure (see later on in this tutorial) is called whenever a message is pending for a specific
window. Each window has a message loop or message pump. This is an endless loop that checks if
there's a message for your window, and if it is, passes the message to the dispatchmessage function.
This function will call your window procedure. The message loop and the windows procedure are
two different things!!!
WinMain proc
hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL hwnd:DWORD
LOCAL msg:MSG ;<<<NEW
........
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
45 / 53
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Set File Permissions. Password: Open Document. Edit Digital Signatures. Ability to get word count of PDF pages. Change Word hyperlink to PDF hyperlink and bookmark
add url to pdf; pdf edit hyperlink
.NET PDF SDK - Description of All PDF Processing Control Feastures
signature; Add signature image to PDF file. PDF Hyperlink Edit. Support outline; More about PDF Hyperlink Edit ▶. PDF Metadata Edit. Support
change link in pdf file; c# read pdf from url
This is what the message loop looks like. The .WHILE TRUE, .ENDW loop goes on until eax is 0.
GetMessage returns 0 if it receives the message WM_QUIT, which should close the window so the
program must exit the messageloop whenever GetMessage returns 0. If it doesn't, the message is
passed to TranslateMessage (this function translates keypresses to messages) and then the message
is dispatched by windows using the DispatchMessage function. The message itself in a message loop
consists of a MSG structure (LOCAL msg:MSG is added to the procedure, which adds a local
message structure called msg). You can use this message loop in all your programs.
12.7 - Window Procedure
Messages will be send to the window procedure. A window procedure should always look like this:
WndProc PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD
.code
WndProc proc hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
mov eax, uMsg
.IF eax==XXXX
.ELSEIF eax==XXXX
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
.ENDIF
ret
WndProc endp
The window procedure should always have 4 parameters:
hWnd contains the window handle.
uMsg is the message
wParam is the first parameter for the message (message specific)
lParam is the second parameter for the message (message specific)
Messages that the window does not process should be passed to DefWindowProc, which takes care
of the processing. An example window procedure:
WndProc proc hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
mov eax, uMsg
.IF eax==WM_CREATE
invoke MessageBox, NULL, ADDR AppName, ADDR AppName, NULL
.ELSEIF eax==WM_DESTROY
invoke PostQuitMessage, NULL
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
.ENDIF
ret
WndProc endp
This code displays the name of the application when the window is initialized. Also note that I've
added the processing of the WM_DESTROY message. This message is sent if the window should
close. The application should react to it with a PostQuitMessage.
Now take a look at the final code:
<view code>
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
46 / 53
Win32Asm Tutorial
prev14- N/A
14.0 - N/A
Sorry, this tutorial is not available yet. This tutorial is still under construction. Please check again
later!
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
47 / 53
Win32Asm Tutorial
prevToolsnext
Tools
This section describes the use of various tools. Please select a tool:
Assembler
Masm
Linker
Link
Resource compiler
brc32
rc
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
48 / 53
Win32Asm Tutorial
prevTools\Masmnext
Masm
Masm is the assembler I use. Others are tasm and nasm but I prefer masm myself (see why). The use
of tasm and nasm (and other assemblers) is not discussed here.
Usage
Masm is ml.exe. The version I use is "Macro Assembler Version 6.14.8444". Syntax:
ML [ /options ] filelist [ /link linkoptions ]
Here are some important options:
/c
assemble without linking
You will use this option most of the time as you will be using
an external linker like link.exe to link your files.
/coff
generate COFF format object file
This is the generic file format for the microsoft linker.
/Fo<file>
name object file
Can be used if you want to output an object file with an other
name than your source file
/G<c|d|z>
Use Pascal, C, or Stdcall calls
Select the default calling convention for your procedures.
/Zi
Add symbolic debug info
Use this option if you want to use a debugger.
/I<name>
Set include path
Defines your default include path
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
49 / 53
Win32Asm Tutorial
prevTools\Linknext
Link
Link is the standard linker of microsoft.
Usage
Link is link.exe. The version I use is "Incremental Linker Version 5.12.8078". Syntax:
LINK [options] [files] [@commandfile]
Here are some important options:
/DEBUG
Debug
This will create debug information. Use this option when
you want to use a debugger.
/DEBUGTYPE:CV|COFF
Debugtype: codeview / coff
Selects the output format of the debug info. This depends
on your debugger. Softice and the visual c++ debugger
both can handle CV (codeview)
/DEF:filename
DEF file
Specifies the definition file (.def). Used with dll's to
export functions.
/DLL
DLL
Outputs a dynamic link library instead of an executable.
/LIBPATH:path
Libpath
Specifies the path of your library files (*.lib).
/I<name>
Set include path
Defines your default include path.
/OUT:filename
Out:filename
Can override the default output filename.
/SUBSYSTEM:{...}
Subsystem
Selects the OS the program should run on:
NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
50 / 53
Documents you may be interested
Documents you may be interested