C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

pb de "type"
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Alni
Guest





PostPosted: Fri Jul 23, 2004 1:40 pm    Post subject: pb de "type" Reply with quote



Bonjour,

J'ai un petit soucis avec les types.
(Je suis sous VC++ 5.0)

//J'importe une dll de manipulation des objet COM d'un serveur ISA

#import "C:Program FilesMicrosoft ISA Servermsfpccom.dll"

//Je déclare mes objets :

DWORD dwRet = 0;
HRESULT hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED );
if (SUCCEEDED (hr) )
{
FPCLib::IFPCPtr fpcRoot;
FPCLib::IFPCArraysPtr fpcArrays;
FPCLib::IFPCArrayPtr fpcArray;
FPCLib::IFPCServersPtr fpcServers;
FPCLib::IFPCWebSessionPtr fpcWebSession;
FPCLib::IFPCWebSessionsPtr fpcWebSessions;
FPCLib::IFPCServerPtr fpcServer;
FPCLib::IFPCFirewallSessionsPtr fpcFirewallSessions;
FPCLib::IFPCFirewallSessionPtr fpcFirewallSession;
FPCLib::IFPCDestinationSetsPtr fpcDestinationSets;
FPCLib::IFPCDestinationSetPtr fpcDestinationSet;
FPCLib::IFPCDestinationPtr fpcDestination;

// J'obtiens le pointeur sur l'objet ISA

hr = fpcRoot.CreateInstance("FPC.Root");

// Ensuite, je parviens à parcourir la config de mon serveur en utilisant
les
membres de cet objet fpcRoot.

// Sauf ici ou je ne parviens pas à me débrouiller a faire un switch/case à
partir du résultat fourni par une fonction membre d'un des objets.

for (long l=1;l<=fpcDestinationSet->Count;l++)
{
fpcDestination=fpcDestinationSet->Item(_variant_t(l),(BSTR) NULL
,(BSTR) NULL );

switch ( fpcDestination->Type ) //*ICI* ça coince
// On peut aussi utiliser ->GetType() même punition
{
case 0 :
printf ("ttDomaine : %-20s n", (char*)
fpcDestination->DomainName);
break;
case 1 :
printf ("ttAdresse IP : %-20s n", (char*)
fpcDestination->IP_From);
break;
default :
printf ("ttDomaine + URL on verra après....");

}
}
----------------------------
J'ai une erreur :
error C2450: switch expression of type 'struct FPCLib::IFPCDestination *' is
illegal Integral expression required

nb : Mon objet destination est bien valide, car si je ne mets que des
destinations de type "domain" dans mon destinationSet, alors je peux les
afficher avec :
printf ("ttDomaine : %-20s n", (char*)
fpcDestination->DomainName);
Sans switch/case pour gerer le type.

Le membre Type d'un objet Destination est défini ici dans le msdn
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/isa/isaobj2_92ex.asp
Et de ce que j'en ai compris, il renvoie une valeur comprise entre 0 et 2
selon le type de l'objet destination.

enum FpcDestinationAddressType {
fpcDestinationTypeDomain,
fpcDestinationTypeSingleIp,
fpcDestinationTypeIpRange
};

Dans le fichier .tli obtenu par l'import de la dll je trouve :

#pragma implementation_key(447)
inline enum FpcDestinationAddressType FPCLib::IFPCDestination::GetType ( ) {
enum FpcDestinationAddressType _result;
HRESULT _hr = get_Type(&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _result;
}

le keyword switch requiert un int, mais je n'arrive pas à "caster" ce qui
est renvoyé par cette fonction en un int.
Si je cast en int alors j'ai :

switch ( (int) fpcDestination->Type )

msfpccom.tli(3554) : error C2556: 'GetType' : overloaded functions only
differ by return type
msfpccom.tli(3554) : error C2371: 'GetType' : redefinition; different basic
types

Pourquoi donc ?





Back to top
drkm
Guest





PostPosted: Fri Jul 23, 2004 2:08 pm    Post subject: Re: pb de "type" Reply with quote



"Alni" <nospam (AT) nowhere (DOT) com> writes:

Quote:
switch ( fpcDestination->Type ) //*ICI* ça coince

error C2450: switch expression of type 'struct FPCLib::IFPCDestination *' is
illegal Integral expression required

FPCLib::IFPCDestinationSetPtr::Type est de type
FPCLib::IFPCDestination *. Un switch requière un type entier.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Alni
Guest





PostPosted: Fri Jul 23, 2004 2:48 pm    Post subject: Re: pb de "type" Reply with quote




"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wk3c3i3jex.fsf (AT) fgeorges (DOT) org...
Quote:
"Alni" <nospam (AT) nowhere (DOT) com> writes:

switch ( fpcDestination->Type ) //*ICI* ça coince

error C2450: switch expression of type 'struct FPCLib::IFPCDestination
*' is
illegal Integral expression required

FPCLib::IFPCDestinationSetPtr::Type est de type
FPCLib::IFPCDestination *.

Bah... Normalement cette fonction ne renvoie pas un pointeur, mais une
valeur comprise entre 0 et 2. Selon cette définition :
enum FpcDestinationAddressType {
fpcDestinationTypeDomain,
fpcDestinationTypeSingleIp,
fpcDestinationTypeIpRange
};

La doc de la fonction Type pour l'objet Destination se trouve là sur cette
page :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/isa/isaobj2_92ex.asp



Back to top
Alni
Guest





PostPosted: Fri Jul 23, 2004 3:28 pm    Post subject: Re: pb de "type" Reply with quote


"Alni" <nospam (AT) nowhere (DOT) com> a écrit dans le message de
news:cdr8fk$9ha$1 (AT) aphrodite (DOT) grec.isp.9tel.net...
Quote:

"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wk3c3i3jex.fsf (AT) fgeorges (DOT) org...
"Alni" <nospam (AT) nowhere (DOT) com> writes:

switch ( fpcDestination->Type ) //*ICI* ça coince


nb : en vbs cela s'utilise de cette façon (vu dans un script qui
fonctionne):

'Destination set info
Const Domain = 0
Const SingleIP = 1
Const IPRange = 2

Dim Dtype

For Each Destination in DestinationSet
DType = Destination.Type
Select Case DType
Case Domain
.../..
Case SingleIP
.../..
Case IPRange
..../..
End Select
Next

Se pourrait il que mon compilo déconne pour penser que cette fonction revoie
un pointeur alors que c'est une valeur entre 0 et 2, et que pourtant dans
les fichiers tli et tlh générés par l'import de la dll je retrouve bien :

#pragma implementation_key(447)
inline enum FpcDestinationAddressType FPCLib::IFPCDestination::GetType ( ) {
enum FpcDestinationAddressType _result;
HRESULT _hr = get_Type(&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _result;
}







Back to top
Eric P.
Guest





PostPosted: Fri Jul 23, 2004 3:51 pm    Post subject: Re: pb de "type" Reply with quote

Alni wrote:
Quote:
Bonjour,

J'ai un petit soucis avec les types.

switch ( fpcDestination->Type ) //*ICI* ça coince

Une chose de ce genre ne marcherait pas mieux ? (non testé)

HRESULT hr;
FpcDestinationAddressType DestType;
hr = fpcDestination->get_Type(&DestType);
if (FAILED(hr)) TraitementErreur();
switch(DestType)
{
case...


Eric

Back to top
M. B.
Guest





PostPosted: Fri Jul 23, 2004 4:08 pm    Post subject: Re: pb de "type" Reply with quote

"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de news:
[email]wkfz7i1z6g.fsf (AT) fgeorges (DOT) org[/email]...
Quote:
"Alni" <nospam (AT) nowhere (DOT) com> writes:

"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wk3c3i3jex.fsf (AT) fgeorges (DOT) org...

"Alni" <nospam (AT) nowhere (DOT) com> writes:

switch ( fpcDestination->Type ) //*ICI* ça coince

error C2450: switch expression of type 'struct
FPCLib::IFPCDestination
*' is
illegal Integral expression required

FPCLib::IFPCDestinationSetPtr::Type est de type
FPCLib::IFPCDestination *.

Bah... Normalement cette fonction ne renvoie pas un pointeur, mais une

Où vois-tu une fonction ?

valeur comprise entre 0 et 2. Selon cette définition :
enum FpcDestinationAddressType {
fpcDestinationTypeDomain,
fpcDestinationTypeSingleIp,
fpcDestinationTypeIpRange
};

La doc de la fonction Type pour l'objet Destination se trouve là sur
cette
page :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/isa/isaobj2

_92ex.asp
Quote:

Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )
^^

Non, 'Type' n'est pas une fonction, mais une propriete qui masque
un acces a GetType() ou SetType(). C'est une extension Microsoft
au langage C++.

MB



Back to top
drkm
Guest





PostPosted: Fri Jul 23, 2004 4:11 pm    Post subject: Re: pb de "type" Reply with quote

"Alni" <nospam (AT) nowhere (DOT) com> writes:

Quote:
"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wk3c3i3jex.fsf (AT) fgeorges (DOT) org...

"Alni" <nospam (AT) nowhere (DOT) com> writes:

switch ( fpcDestination->Type ) //*ICI* ça coince

error C2450: switch expression of type 'struct FPCLib::IFPCDestination
*' is
illegal Integral expression required

FPCLib::IFPCDestinationSetPtr::Type est de type
FPCLib::IFPCDestination *.

Bah... Normalement cette fonction ne renvoie pas un pointeur, mais une

Où vois-tu une fonction ?

Quote:
valeur comprise entre 0 et 2. Selon cette définition :
enum FpcDestinationAddressType {
fpcDestinationTypeDomain,
fpcDestinationTypeSingleIp,
fpcDestinationTypeIpRange
};

La doc de la fonction Type pour l'objet Destination se trouve là sur cette
page :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/isa/isaobj2_92ex.asp

Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )
^^

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Eric P.
Guest





PostPosted: Fri Jul 23, 2004 4:28 pm    Post subject: Re: pb de "type" Reply with quote

M. B. wrote:
Quote:
"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de news:
Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )

Non, 'Type' n'est pas une fonction, mais une propriete qui masque
un acces a GetType() ou SetType(). C'est une extension Microsoft
au langage C++.

MB

Ah, effectivement...
C'est le
#import "C:Program FilesMicrosoft ISA Servermsfpccom.dll"
qui va permettre au compilateur Microsoft de comprendre des raccourcis
soit-disant plus simples, mais en fait on ne sait absolument pas ce qui
se passe donc ça pose plus de problèmes que ça en résoud...

En principe ces #import ne sont jamais obligatoires, tu peux toujours
utiliser les objts COM dont tu as besoin de façon standard
(CoCreateInstance...).
J'avais utilisé un #import pour accéder à ADO à une époque comme dans
l'exemple de la MSDN, et finalement ne comprenant absolument pas les
bidouilles que ça impliquaient j'avais tout migré vers une solution
standard.

Eric

Back to top
drkm
Guest





PostPosted: Fri Jul 23, 2004 4:31 pm    Post subject: Re: pb de "type" Reply with quote

"M. B." <m_binder (AT) magicnet (DOT) com> writes:

Quote:
"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de news:
[email]wkfz7i1z6g.fsf (AT) fgeorges (DOT) org[/email]...

"Alni" <nospam (AT) nowhere (DOT) com> writes:

"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wk3c3i3jex.fsf (AT) fgeorges (DOT) org...

"Alni" <nospam (AT) nowhere (DOT) com> writes:

switch ( fpcDestination->Type ) //*ICI* ça coince

error C2450: switch expression of type 'struct
FPCLib::IFPCDestination
*' is
illegal Integral expression required

FPCLib::IFPCDestinationSetPtr::Type est de type
FPCLib::IFPCDestination *.

Bah... Normalement cette fonction ne renvoie pas un pointeur, mais une

Où vois-tu une fonction ?

valeur comprise entre 0 et 2. Selon cette définition :
enum FpcDestinationAddressType {
fpcDestinationTypeDomain,
fpcDestinationTypeSingleIp,
fpcDestinationTypeIpRange
};

La doc de la fonction Type pour l'objet Destination se trouve là sur
cette
page :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/isa/isaobj2
_92ex.asp

Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )
^^

Non, 'Type' n'est pas une fonction, mais une propriete qui masque
un acces a GetType() ou SetType(). C'est une extension Microsoft
au langage C++.

D'après la page sus-citée, la syntaxe d'accès en C++ est :

C++ Syntax[C++]

HRESULT get_Type(
FpcDestinationAddressType *pDestType
);

La valeur de retour n'est pas documentée. Je vais ici considérer
qu'il s'agit d'un booléen indiquant si l'opération s'est bien passée.
À adapter évidemment en fonction du type et de la sémantique de la
valeur de retour. Bon, ceci devrait donc faire l'affaire :

FpcDestinationAddressType type ;

if ( ! fpcDestination->get_Type( & type ) ) {
// erreur ...
}

switch ( type ) {
case fpcDestinationTypeDomain :
// ...
case fpcDestinationTypeSingleIp :
// ...
case fpcDestinationTypeIpRange :
// ...
}

Tiens compte éventuellement d'un cas par défaut, ainsi que de break
à la fin de chaque cas.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
M. B.
Guest





PostPosted: Fri Jul 23, 2004 4:34 pm    Post subject: Re: pb de "type" Reply with quote


"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de news:
[email]wk7jsu1y81.fsf (AT) fgeorges (DOT) org[/email]...
Quote:
"M. B." <m_binder (AT) magicnet (DOT) com> writes:

"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de news:
[email]wkfz7i1z6g.fsf (AT) fgeorges (DOT) org[/email]...

"Alni" <nospam (AT) nowhere (DOT) com> writes:

"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wk3c3i3jex.fsf (AT) fgeorges (DOT) org...

"Alni" <nospam (AT) nowhere (DOT) com> writes:

switch ( fpcDestination->Type ) //*ICI* ça coince

error C2450: switch expression of type 'struct
FPCLib::IFPCDestination
*' is
illegal Integral expression required

FPCLib::IFPCDestinationSetPtr::Type est de type
FPCLib::IFPCDestination *.

Bah... Normalement cette fonction ne renvoie pas un pointeur, mais
une

Où vois-tu une fonction ?

valeur comprise entre 0 et 2. Selon cette définition :
enum FpcDestinationAddressType {
fpcDestinationTypeDomain,
fpcDestinationTypeSingleIp,
fpcDestinationTypeIpRange
};

La doc de la fonction Type pour l'objet Destination se trouve là sur
cette
page :


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/isa/isaobj2
_92ex.asp

Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )
^^

Non, 'Type' n'est pas une fonction, mais une propriete qui masque
un acces a GetType() ou SetType(). C'est une extension Microsoft
au langage C++.

D'après la page sus-citée, la syntaxe d'accès en C++ est :

C++ Syntax[C++]

HRESULT get_Type(
FpcDestinationAddressType *pDestType
);

La valeur de retour n'est pas documentée. Je vais ici considérer
qu'il s'agit d'un booléen indiquant si l'opération s'est bien passée.
À adapter évidemment en fonction du type et de la sémantique de la
valeur de retour. Bon, ceci devrait donc faire l'affaire :

FpcDestinationAddressType type ;

if ( ! fpcDestination->get_Type( & type ) ) {
// erreur ...
}

switch ( type ) {
case fpcDestinationTypeDomain :
// ...
case fpcDestinationTypeSingleIp :
// ...
case fpcDestinationTypeIpRange :
// ...
}


HRESULT est un entier 32 bits contenant un code de retour.

MB



Back to top
M. B.
Guest





PostPosted: Fri Jul 23, 2004 4:35 pm    Post subject: Re: pb de "type" Reply with quote

"Eric P." <ericPASDE (AT) SPAMerixpage (DOT) com> a écrit dans le message de news:
cdre8v$ebb$1 (AT) news-reader5 (DOT) wanadoo.fr...
Quote:
M. B. wrote:
"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de news:
Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )

Non, 'Type' n'est pas une fonction, mais une propriete qui masque
un acces a GetType() ou SetType(). C'est une extension Microsoft
au langage C++.

MB

Ah, effectivement...
C'est le
#import "C:Program FilesMicrosoft ISA Servermsfpccom.dll"
qui va permettre au compilateur Microsoft de comprendre des raccourcis
soit-disant plus simples, mais en fait on ne sait absolument pas ce qui
se passe donc ça pose plus de problèmes que ça en résoud...

En principe ces #import ne sont jamais obligatoires, tu peux toujours
utiliser les objts COM dont tu as besoin de façon standard
(CoCreateInstance...).
J'avais utilisé un #import pour accéder à ADO à une époque comme dans
l'exemple de la MSDN, et finalement ne comprenant absolument pas les
bidouilles que ça impliquaient j'avais tout migré vers une solution
standard.

Eric

Pareil ...

MB



Back to top
Alni
Guest





PostPosted: Fri Jul 23, 2004 5:05 pm    Post subject: Re: pb de "type" Reply with quote

Bonjour,

M. B. <m_binder (AT) magicnet (DOT) com> a écrit :

Quote:
Ha, Type est une fonction. Que se passe-t-il avec ceci ?

switch ( fpcDestination->Type() )
^^

Non, 'Type' n'est pas une fonction, mais une propriete qui masque
un acces a GetType() ou SetType(). C'est une extension Microsoft
au langage C++.

Exactement.


Back to top
Alni
Guest





PostPosted: Fri Jul 23, 2004 5:09 pm    Post subject: Re: pb de "type" Reply with quote

Bonjour,

Eric P. <ericPASDE (AT) SPAMerixpage (DOT) com> a écrit :

Quote:
Alni wrote:
Bonjour,

J'ai un petit soucis avec les types.

switch ( fpcDestination->Type ) //*ICI* ça coince

Une chose de ce genre ne marcherait pas mieux ? (non testé)

HRESULT hr;
FpcDestinationAddressType DestType;
hr = fpcDestination->get_Type(&DestType);
if (FAILED(hr)) TraitementErreur();
switch(DestType)

J'y ai bien pensé, mais le compilo refuse :

FpcDestinationAddressType DestType; //undefined type
FpcDestinationAddressType

Bien que, comme je l'ai mentionné plus haut, ce type est présent dans
les tlh et tli.


Back to top
Alni
Guest





PostPosted: Fri Jul 23, 2004 5:10 pm    Post subject: Re: pb de "type" Reply with quote

Bonjour,

drkm <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit :

Quote:
Tiens compte éventuellement d'un cas par défaut, ainsi que de break
à la fin de chaque cas.

Oui, bien sûr...

Remarque, j'aurais pu oublier ce genre de détails, mais pas aujourd'hui.
Je ne code pas très souvent, mais je fais quand même 2 ou 3 appli en
C/C++ par an depuis 1987.

Bon, enfin merci à tous pour votre aide, je vais encore creuser...
Mais s'il vous vient une idée, n'hésitez pas.



Back to top
drkm
Guest





PostPosted: Fri Jul 23, 2004 5:24 pm    Post subject: Re: pb de "type" Reply with quote

"Alni" <nospam (AT) nowhere (DOT) com> writes:

Quote:
drkm <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit :

Tiens compte éventuellement d'un cas par défaut, ainsi que de break
à la fin de chaque cas.

Oui, bien sûr...

Remarque, j'aurais pu oublier ce genre de détails, mais pas aujourd'hui.
Je ne code pas très souvent, mais je fais quand même 2 ou 3 appli en
C/C++ par an depuis 1987.

Bon, enfin merci à tous pour votre aide, je vais encore creuser...
Mais s'il vous vient une idée, n'hésitez pas.

As-tu essayé le code que je t'ai donné ? D'après l'URL que tu avais
renseignée, ce devrait être bon.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.