Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

IMAPI IDiscMasterProgressEvents

5 réponses
Avatar
e.de-raguenel
realisant une application utilisant l'interface IMAPI

j'essaye de compredre comme fonctionne l'interface
"IDiscMasterProgressEvents" pour recuperer l'evolution de ma
gravure.mais la je n'arrive pas a recuperé de valeur ou que se soit.

voici mon le bout de code qui pose probleme

IDiscMasterProgressEvents *progresBurn=NULL;
UINT_PTR* pnCookie;
dmas.ProgressAdvise(progresBurn,pnCookie);

(dmas etant une instance de CDiscMaster)

donc si quelqu'un pouvait avoir un exemple ou m'expliquer comment
recuperer la valeur venant de "NotifyBlockProgress".


merci d'avance de votre attention

eng

5 réponses

Avatar
Vincent Burel
"eng" wrote in message
news:
realisant une application utilisant l'interface IMAPI

j'essaye de compredre comme fonctionne l'interface
"IDiscMasterProgressEvents" pour recuperer l'evolution de ma
gravure.mais la je n'arrive pas a recuperé de valeur ou que se soit.

voici mon le bout de code qui pose probleme

IDiscMasterProgressEvents *progresBurn=NULL;
UINT_PTR* pnCookie;
dmas.ProgressAdvise(progresBurn,pnCookie);

(dmas etant une instance de CDiscMaster)

donc si quelqu'un pouvait avoir un exemple ou m'expliquer comment
recuperer la valeur venant de "NotifyBlockProgress".



Donc pour que cela fonctionne il faut que votre interface
IDiscMasterProgressEvents soit valide... donc non nul.

IDiscMasterProgressEvents est une interface, c'est à dire une liste de
pointeurs de fonction, ou table de méthode organisé de la manière suivante :

static IDiscMasterProgressEventsVtbl vtblIDiscMasterProgressEvents {
iDiscMasterProgressEvents_QueryInterface,
iDiscMasterProgressEvents_AddRef,
iDiscMasterProgressEvents_Release,
//--------------------------
iDiscMasterProgressEvents_QueryCancel,
iDiscMasterProgressEvents_NotifyPnPActivity,
iDiscMasterProgressEvents_NotifyAddProgress,
iDiscMasterProgressEvents_NotifyBlockProgress,
iDiscMasterProgressEvents_NotifyTrackProgress,
iDiscMasterProgressEvents_NotifyPreparingBurn,
iDiscMasterProgressEvents_NotifyClosingDisc,
iDiscMasterProgressEvents_NotifyBurnComplete,
iDiscMasterProgressEvents_NotifyEraseComplete
};

quand vous appelez ProgressAdvise en passant l'interface progresBurn ,
l'object à qui vous vous adressez, s'attent à trouver dans progessBurn
l'adresse d'une table de fonction comme ci-dessus. Il faut donc que vous
créez cette table de fonctions et aussi que vous créez les corps de chaque
fonctions , notamment les xxx_NotifyXxxxx, car ce sont ces fonctions qui
seront appelées par le processus de gravage pour vous donner l'état
d'avancement en temps réel.

Maintenant pour vous aidé à implanter cette interface il faudrait nous dire
si vous programmez en C ou en C++ (VC++ ou NET !?).

VB
Avatar
e.de-raguenel
Merci de votre explication.
Je vais essayer de me dépatouiller,avec ca.
Je développe mon application sous VC++.
Avatar
Vincent Burel
"eng" wrote in message
news:
Merci de votre explication.
Je vais essayer de me dépatouiller,avec ca.
Je développe mon application sous VC++.



oui, mais en "C" ou "C++" ?

parce que ce n'est pas la même façon de mettre en oeuvre votre interface COM
selon votre implémentation "C" ou "C++". Si vous êtes en C++, c'est
normallement plus simple...

VB
Avatar
e.de-raguenel
c'est en c++.
Avatar
Vincent Burel
"eng" wrote in message
news:
c'est en c++.



et ouai, bon, c'est pas mon fort le C++, j'espère que d'autres vous
répondront et complèteront ma réponse.

faut doter l'objet d'une interface IDiscMasterProgressEvents :

class MyObject : public IDiscMasterProgressEvents

{
public :
//------ IDiscMasterProgressEvents
STDMETHODIMP QueryCancel(boolean * pbCancel);
STDMETHODIMP NotifyPnPActivity(void);
STDMETHODIMP NotifyAddProgress(long nCompletedSteps, long
nTotalSteps);
etc...
}

je ne pense qu'on ait besoin de faire un DECLARE_INTERFACE... peut-être une
implémentation des 3 fonctions

STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
STDMETHODIMP AddRef();
STDMETHODIMP Release();

ca dépend de ce que vous utilisez pour formaliser COM... regardez dans la
doc Microsoft comment ajouter une interface à un objet en C++ ... et comment
obtenir un pointeur dessus

VB