L'UTILISATION DE COM

L'utilisation de COM ne demande que des déclarations.Au final cela revient à pouvoir utiliser le code
fournit par le sytème sans se préoccuper des librairies et des mises à jour.
Interfaces et implémentation d'interfaces sont fournis par Editmasm.
Cette page va en donner quelques exemples
Page de garde

RECONNAISSANCE VOCALE envoie Text_intro au Haut Parleur

 

include sdk32.inc
include sapi.sdk

InitInstance PROTO :DWORD
.const
sCLSID_SpVoice TEXTEQU <{096749377h,03391h,011D2h,{09Eh,0E3h,000h,0C0h,04Fh,079h,073h,096h}}>
sIID_ISpVoice TEXTEQU <{06C44DF74h,072B9h,04992h,{0A1h,0ECh,0EFh,099h,06Eh,004h,022h,0D4h}}>

.data
CLSID_SpVoice GUID sCLSID_SpVoice
IID_ISpVoice GUID sIID_ISpVoice
ppvISpVoice dd 0
Text_intro db "Bonjour,je suis la",0
Speech_Buffer dw 1024 dup(?)
hInstance dd 0
.code

start:
invoke InitInstance,1
;---- code here --------
invoke CoCreateInstance,addr CLSID_SpVoice,NULL,CLSCTX_ALL,addr IID_ISpVoice,addr ppvISpVoice
;---------- passer le texte en unicode ------------------------------------------------
invoke MultiByteToWideChar,NULL,NULL,addr Text_intro,-1,addr Speech_Buffer,1024
ISpVoice Speak,addr Speech_Buffer,SPF_DEFAULT,NULL
ISpVoice Release

invoke InitInstance,0
invoke ExitProcess,0
InitInstance PROC init:DWORD
Local retour:DWORD
mov retour,1
.if init == 1
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke CoInitializeEx ,NULL, COINIT_APARTMENTTHREADED ;COINIT_MULTITHREADED ;Thread 3
.else
invoke CoUninitialize
.endif

FindeInitInstance:
mov eax,retour
ret
InitInstance endp
;################################################################
La pêche aux infos avec MIDL,OLEVIEW,COMVIEW

 

La coclass et les interfaces qu'elle contient est une information donné exlusivement par les .IDL donné
habituellement dans les répertoires INCLUDE du SDK windows.
IDL=Interface Definition Language
MIDL=Microsoft Interface Definition Language
Midl (utilitaire sdk) permet de transformer le IDL en .H,.C,.tlb et de generer un proxy
Midl est utilisable  sans option,ouvrir une fenêtre DOS dans Editmasm et taper midl.
Headinc permet de traduire ces fichiers (pas le proxy).Un des points c fournit une liste complète des coclass CLSID et IID_Interface.
OLEVIEW permet d'extraire et de traduire en texte les .tlb (typelib)
Enfin COMVIEW https://github.com/Baron-von-Riedesel/ComView
COMVIEW,mis a jour, produit du code asm avec les typelib
Reutiliser Flash Player                       Application d'astronomie

 

le flash player permet de visualiser des animations sur internet mais pas que sur internet.
On peut le reutiliser dans des executables,voici comment.

ATL fait partie du winddk C:\WinDDK\7600.16385.1\inc\atl71
C'est pour ça que les inclus traduits sont ajoutés ici.
Pour les inclus du flash player chercher Internet
c'est un vieux source,mais il marche toujours aussi bien apres actualisation WIN10
14.28.29333 et 10.0.19041.0
Beaucoup de declarations,peu de code et une liaison dynamique avec atl.dll
*************** vous ne trouvez pas le sdk flash player sur internet ????????
Ce n'est pas un mauvais coup de microsoft,le fichier nécessaire est dans votre disque quelque part.
Pour le trouver,lancer editmasm>>outils>>chercher la base de registre
rentrer IShockwaveFlash ,bouton chercher nom,on obtient
C:\Windows\System32\Macromed\Flash\Flash.ocx
mettre le chemin dans oleview,il vous extrait le .idl
servez vous de midl pour une transformation en .H .c
Et enfin utiliser le traducteur de header sur les .h,.c traduit.
***************** Doomed you are doomed,ça ne marche pas.
Oleview vous répond "dllregister Iviewers.dll couldn't be loaded"
Il faut executer au moins une fois oleview manuellement avec des droits d'administrateur
et le défaut disparait.
Le fichier idl 2020 est joint.
Les fichiers .swf ont été téléchargés sur un site d'astronomie.
Ici le source pour le transformer en fichier executable  ATL_flash_player
 

 

 
 

 

 
 
   
 
   
 
   
 

 

 
 

 

_______________________________

 

 

 

 

   

 

Exemples de code avec listing