 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Alni Guest
|
Posted: Fri Jul 23, 2004 1:40 pm Post subject: pb de "type" |
|
|
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
|
Posted: Fri Jul 23, 2004 2:08 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 2:48 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 3:28 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 3:51 pm Post subject: Re: pb de "type" |
|
|
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
|
Posted: Fri Jul 23, 2004 4:08 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 4:11 pm Post subject: Re: pb de "type" |
|
|
"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 ?
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
|
Posted: Fri Jul 23, 2004 4:28 pm Post subject: Re: pb de "type" |
|
|
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
|
Posted: Fri Jul 23, 2004 4:31 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 4:34 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 4:35 pm Post subject: Re: pb de "type" |
|
|
"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
|
Posted: Fri Jul 23, 2004 5:05 pm Post subject: Re: pb de "type" |
|
|
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
|
Posted: Fri Jul 23, 2004 5:09 pm Post subject: Re: pb de "type" |
|
|
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
|
Posted: Fri Jul 23, 2004 5:10 pm Post subject: Re: pb de "type" |
|
|
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
|
Posted: Fri Jul 23, 2004 5:24 pm Post subject: Re: pb de "type" |
|
|
"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 |
|
 |
|
|
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
|
|