well some time ago i asked for some litle example on how to use dll or ocx that have
functions that are not exported . well i know there was some about that , but only
masm or tasm . here how we do in NASM using NAGOA


%include '\lab\vasm\inc\nagoa.inc'

STRUC GUID
.Data1 resd 1
.Data2 resw 1
.Data3 resw 1
.Data4 resb 8
ENDSTRUC

CLSCTX_INPROC_SERVER equ 1





DIALOG_ID equ 100

;====================================================
; we can see methods as functions inside a dll or ocx that are not exported
; ====================================================
; VTable that includes the pointers to the methods.
; first 3 methods are always in every COM and are of IUnknown
; In fact, all the COM interfaces are built like this.
; ====================================================
STRUC ITaskBarList
;==This are pointers to IUnknown interface
.QueryInterface resd 1
.AddRef resd 1
.Release resd 1
;==This are pointers to Methods (functions) of ITaskbarlist

.HrInit resd 1
.AddTab resd 1
.DeleteTab resd 1
.ActivateTab resd 1
.SetActiveAlt resd 1
ENDSTRUC
;============================================





;=== CLSID_TaskbarList '56FDF344-FD6D-11D0-958A-006097C9A090'

CLSID_TaskbarList:
ISTRUC GUID
AT GUID.Data1 , dd 56FDF344h
AT GUID.Data2 , dw 0FD6Dh
AT GUID.Data3 , dw 11D0h
AT GUID.Data4 , db 95h,8Ah,0,60h,97h,0C9h,0A0h,90h
IEND

; IID_ITaskbarList '56FDF342-FD6D-11D0-958A-006097C9A090'

IID_ITaskbarList:
ISTRUC GUID
AT GUID.Data1 , dd 56fdf342h
AT GUID.Data2 , dw 0FD6Dh
AT GUID.Data3 , dw 11D0h
AT GUID.Data4 , db 95h,8Ah,0,60h,97h,0C9h,0A0h,90h
IEND







..start:
call GetModuleHandleA, NULL
CONST hInst , dd 0
mov , eax
call DialogBoxParamA, ,DIALOG_ID, 0,DialogProc, 0
call ExitProcess,


; ============ [ MAIN DIALOLOG PROC ] =====================:

proc DialogProc,hdlg,msg,wParam,lParam

cmp dword ,WM_INITDIALOG
je wm_inidialog
cmp dword ,WM_COMMAND
je near wm_command
;cmp dword ,WM_PAINT
;je near wm_paint
cmp dword ,WM_CLOSE
je near wm_close
return FALSE

;; =============
wm_inidialog:

return TRUE

;; =============
wm_command:

cmp dword , 1002 ; show on taskbar ?

je show


return TRUE

;; =============
show:
invoke ShowOnTaskbar,
return FALSE
;; =============

wm_close:
call ExitProcess,0
return FALSE
;------------
endproc ; ============== [ MAIN DIALOGPROC END ] =============== :





; ---------[ ShowOnTaskbar ] ------------------------
proc ShowOnTaskbar,hWin
sectiondata
ShellTaskBar resb ITaskBarList_size
sectioncode
call CoInitialize,NULL
call CoCreateInstance,CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,ShellTaskBar
callcom ShellTaskBar,ITaskBarList.HrInit
callcom ShellTaskBar,ITaskBarList.AddTab,
callcom ShellTaskBar,ITaskBarList.ActivateTab,
endproc
; ---------[ ShowOnTaskbar END ] ---------------------



now i?m happy :)) i can use OCX lololol us well

;-)
Posted on 2003-11-21 21:02:11 by Nguga
Hi Nguga,

For MASM users I posted an example of this interface a little earlier in the week when answering a question:

http://www.asmcommunity.net/board/index.php?topic=16099
Posted on 2003-11-21 21:22:58 by donkey
my problem was to understand what was is fu*ing GUID ??? lololol

in MASM you do this:
sIID_ITaskbarListtextequ<{056FDF342H, 0FD6DH, 011D0H,\
{095H, 08AH, 000H, 060H, 097H, 0C9H, 0A0H, 090H}}>

and for me it was chinese....

i asked here in this post what it was that in real assembly no one respond ...



know it is very clear .


;;=== CLSID_TaskbarList '56FDF344-FD6D-11D0-958A-006097C9A090'

CLSID_TaskbarList:
ISTRUC GUID
AT GUID.Data1 , dd 56FDF344h
AT GUID.Data2 , dw 0FD6Dh
AT GUID.Data3 , dw 11D0h
AT GUID.Data4 , db 95h,8Ah,0,60h,97h,0C9h,0A0h,90h
IEND

;;=== IID_ITaskbarList '56FDF342-FD6D-11D0-958A-006097C9A090'

IID_ITaskbarList:
ISTRUC GUID
AT GUID.Data1 , dd 56fdf342h
AT GUID.Data2 , dw 0FD6Dh
AT GUID.Data3 , dw 11D0h
AT GUID.Data4 , db 95h,8Ah,0,60h,97h,0C9h,0A0h,90h
IEND
Posted on 2003-11-21 21:35:03 by Nguga
Ah, I see. It is only that way because I use my own INC file for getting the GUIDs. Rather than have to include the whole file (43K) in the post I just copied the two lines from it that were necessary. The file is structured as a long list of hundreds of textequ's for CLSIDs and IIDs because that is how I learned to work with them and the way I am most comfortable with. I just thought it was widely known that a GUID is simply a structure, it is listed at MSDN as such. By the way textequ is just a way to represent a constant, it is *real* assembly ;)
Posted on 2003-11-21 21:44:19 by donkey