Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256
octets. Mon problème vient du fait que j'ai toujours developpe en C++ et que
je ne connais rien au type d'un controle activeX.
Lorsque je crée une méthode dans mon activeX, il me demande le type de
retour, je mets quoi pour un tableau 'octets ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
François Picalausa
Bonjour/soir,
Essaye ceci: Public Function Toto(Param1 As Type, Param2 As Type, ...) As Byte() Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable End Function
On pourrait aussi utiliser une fonction qui ne revoie la donnée que d'un index: Public Function Toto(Param1 As Type, Param2 As Type, ..., Index As Long) As Byte Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable(Index) End Function
Autant dans l'exemple cette méthode peut sembler inutile, autant elle peut l'être quand tu as un tableau privé d'un module (et que donc, tu ne dois pas recalculer les éléments à chaque fois). Il est aussi possible d'utiliser un type String qui renverra une chaine de caractère (donc, une suite d'octets)
"mosfet" a écrit dans le message de news:c0qoi0$ijc$
Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256 octets. Mon problème vient du fait que j'ai toujours developpe en C++ et que je ne connais rien au type d'un controle activeX. Lorsque je crée une méthode dans mon activeX, il me demande le type de retour, je mets quoi pour un tableau 'octets ?
Bonjour/soir,
Essaye ceci:
Public Function Toto(Param1 As Type, Param2 As Type, ...) As Byte()
Dim MyTable(255) As Byte '(0 à 255 = 256 éléments)
MyTable(0) = 1
'...
Toto = MyTable
End Function
On pourrait aussi utiliser une fonction qui ne revoie la donnée que d'un
index:
Public Function Toto(Param1 As Type, Param2 As Type, ..., Index As Long) As
Byte
Dim MyTable(255) As Byte '(0 à 255 = 256 éléments)
MyTable(0) = 1
'...
Toto = MyTable(Index)
End Function
Autant dans l'exemple cette méthode peut sembler inutile, autant elle peut
l'être quand tu as un tableau privé d'un module (et que donc, tu ne dois pas
recalculer les éléments à chaque fois).
Il est aussi possible d'utiliser un type String qui renverra une chaine de
caractère (donc, une suite d'octets)
"mosfet" <tricubes@wanadoo.fr> a écrit dans le message de
news:c0qoi0$ijc$1@news-reader3.wanadoo.fr
Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256
octets. Mon problème vient du fait que j'ai toujours developpe en C++
et que je ne connais rien au type d'un controle activeX.
Lorsque je crée une méthode dans mon activeX, il me demande le type de
retour, je mets quoi pour un tableau 'octets ?
Essaye ceci: Public Function Toto(Param1 As Type, Param2 As Type, ...) As Byte() Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable End Function
On pourrait aussi utiliser une fonction qui ne revoie la donnée que d'un index: Public Function Toto(Param1 As Type, Param2 As Type, ..., Index As Long) As Byte Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable(Index) End Function
Autant dans l'exemple cette méthode peut sembler inutile, autant elle peut l'être quand tu as un tableau privé d'un module (et que donc, tu ne dois pas recalculer les éléments à chaque fois). Il est aussi possible d'utiliser un type String qui renverra une chaine de caractère (donc, une suite d'octets)
"mosfet" a écrit dans le message de news:c0qoi0$ijc$
Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256 octets. Mon problème vient du fait que j'ai toujours developpe en C++ et que je ne connais rien au type d'un controle activeX. Lorsque je crée une méthode dans mon activeX, il me demande le type de retour, je mets quoi pour un tableau 'octets ?
mosfet
J'oublais de préciser que je developpe mon controle activeX en Visual C++ car je dois appeler une dll assez compliquée (pleins de pointeurs de pointeurs, ... et donc en VB c'est pas facile). Lorsque je vais dans le ClassWizard j'ai un onglet automation dans lequel je peux ajouter soit une méthode soit une propriété, cependant quand j'essaye de creer une methode, les types de retour sont les uisvants:
void short long float double CURRENCY DATE BSTR OLE_DATAPATH ... ...
Je mets quoi ? Y'a pas Byte
"François Picalausa" a écrit dans le message de news:uw79$
Bonjour/soir,
Essaye ceci: Public Function Toto(Param1 As Type, Param2 As Type, ...) As Byte() Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable End Function
On pourrait aussi utiliser une fonction qui ne revoie la donnée que d'un index: Public Function Toto(Param1 As Type, Param2 As Type, ..., Index As Long)
As
Byte Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable(Index) End Function
Autant dans l'exemple cette méthode peut sembler inutile, autant elle peut l'être quand tu as un tableau privé d'un module (et que donc, tu ne dois
pas
recalculer les éléments à chaque fois). Il est aussi possible d'utiliser un type String qui renverra une chaine de caractère (donc, une suite d'octets)
"mosfet" a écrit dans le message de news:c0qoi0$ijc$ > Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256 > octets. Mon problème vient du fait que j'ai toujours developpe en C++ > et que je ne connais rien au type d'un controle activeX. > Lorsque je crée une méthode dans mon activeX, il me demande le type de > retour, je mets quoi pour un tableau 'octets ?
J'oublais de préciser que je developpe mon controle activeX en Visual C++
car je dois appeler une dll assez compliquée (pleins de pointeurs de
pointeurs, ... et donc en VB c'est pas facile).
Lorsque je vais dans le ClassWizard j'ai un onglet automation dans lequel je
peux ajouter soit une méthode soit une propriété, cependant quand j'essaye
de creer une methode, les types de retour sont les uisvants:
void
short
long
float
double
CURRENCY
DATE
BSTR
OLE_DATAPATH
...
...
Je mets quoi ? Y'a pas Byte
"François Picalausa" <fpicalausa@chez.com> a écrit dans le message de
news:uw79$UK9DHA.2404@TK2MSFTNGP12.phx.gbl...
Bonjour/soir,
Essaye ceci:
Public Function Toto(Param1 As Type, Param2 As Type, ...) As Byte()
Dim MyTable(255) As Byte '(0 à 255 = 256 éléments)
MyTable(0) = 1
'...
Toto = MyTable
End Function
On pourrait aussi utiliser une fonction qui ne revoie la donnée que d'un
index:
Public Function Toto(Param1 As Type, Param2 As Type, ..., Index As Long)
As
Byte
Dim MyTable(255) As Byte '(0 à 255 = 256 éléments)
MyTable(0) = 1
'...
Toto = MyTable(Index)
End Function
Autant dans l'exemple cette méthode peut sembler inutile, autant elle peut
l'être quand tu as un tableau privé d'un module (et que donc, tu ne dois
pas
recalculer les éléments à chaque fois).
Il est aussi possible d'utiliser un type String qui renverra une chaine de
caractère (donc, une suite d'octets)
"mosfet" <tricubes@wanadoo.fr> a écrit dans le message de
news:c0qoi0$ijc$1@news-reader3.wanadoo.fr
> Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256
> octets. Mon problème vient du fait que j'ai toujours developpe en C++
> et que je ne connais rien au type d'un controle activeX.
> Lorsque je crée une méthode dans mon activeX, il me demande le type de
> retour, je mets quoi pour un tableau 'octets ?
J'oublais de préciser que je developpe mon controle activeX en Visual C++ car je dois appeler une dll assez compliquée (pleins de pointeurs de pointeurs, ... et donc en VB c'est pas facile). Lorsque je vais dans le ClassWizard j'ai un onglet automation dans lequel je peux ajouter soit une méthode soit une propriété, cependant quand j'essaye de creer une methode, les types de retour sont les uisvants:
void short long float double CURRENCY DATE BSTR OLE_DATAPATH ... ...
Je mets quoi ? Y'a pas Byte
"François Picalausa" a écrit dans le message de news:uw79$
Bonjour/soir,
Essaye ceci: Public Function Toto(Param1 As Type, Param2 As Type, ...) As Byte() Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable End Function
On pourrait aussi utiliser une fonction qui ne revoie la donnée que d'un index: Public Function Toto(Param1 As Type, Param2 As Type, ..., Index As Long)
As
Byte Dim MyTable(255) As Byte '(0 à 255 = 256 éléments) MyTable(0) = 1 '... Toto = MyTable(Index) End Function
Autant dans l'exemple cette méthode peut sembler inutile, autant elle peut l'être quand tu as un tableau privé d'un module (et que donc, tu ne dois
pas
recalculer les éléments à chaque fois). Il est aussi possible d'utiliser un type String qui renverra une chaine de caractère (donc, une suite d'octets)
"mosfet" a écrit dans le message de news:c0qoi0$ijc$ > Je dois faire un controle ActiveX qui doit renvoyer un tableau de 256 > octets. Mon problème vient du fait que j'ai toujours developpe en C++ > et que je ne connais rien au type d'un controle activeX. > Lorsque je crée une méthode dans mon activeX, il me demande le type de > retour, je mets quoi pour un tableau 'octets ?
François Picalausa
Bonjour/soir,
Pour une question sur Visual C++, peut-être demander sur le groupe correspondant? ;-) news://msnews.microsoft.com/microsoft.public.fr.vc
"mosfet" a écrit dans le message de news:c0qvro$bh1$
J'oublais de préciser que je developpe mon controle activeX en Visual C++ car je dois appeler une dll assez compliquée
Fabrice MALAINGRE
Bonjour "mosfet",
Pour passer des tableaux de C++ vers VB (et vice versa), il faut utiliser le type SafeArray.
Dans l'IDL de ton composant C++ cela donne quelque chose du genre : => [id(1), helpstring("method TakeMyArray")] HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
Quant au code C++, la création du SafeArray s'effectue via la méthode "SafeArrayCreateVector" où tu doit désigner le type des éléments contenus dans le tableau ("VT_I4" pour un long).
Cordialement
____________________________ Fabrice MALAINGRE Architecte Logiciel - Chef de Projet THEORIS - www.theoris.fr
Bonjour "mosfet",
Pour passer des tableaux de C++ vers VB (et vice versa), il faut utiliser le
type SafeArray.
Dans l'IDL de ton composant C++ cela donne quelque chose du genre :
=> [id(1), helpstring("method TakeMyArray")] HRESULT TakeMyArray([in, out]
long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
Quant au code C++, la création du SafeArray s'effectue via la méthode
"SafeArrayCreateVector" où tu doit désigner le type des éléments contenus
dans le tableau ("VT_I4" pour un long).
Cordialement
____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr
Pour passer des tableaux de C++ vers VB (et vice versa), il faut utiliser le type SafeArray.
Dans l'IDL de ton composant C++ cela donne quelque chose du genre : => [id(1), helpstring("method TakeMyArray")] HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
Quant au code C++, la création du SafeArray s'effectue via la méthode "SafeArrayCreateVector" où tu doit désigner le type des éléments contenus dans le tableau ("VT_I4" pour un long).
Cordialement
____________________________ Fabrice MALAINGRE Architecte Logiciel - Chef de Projet THEORIS - www.theoris.fr
mosfet
merci bcp. Au moins j'avance un peu. Par contre dois je utiliser le Classwirard pour ca ou ecrire directement dans le .odl ? Pourriez vous me décrypter cette ligne :
HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
dans la ligne au dessus quelles sont les paramètres et quel est le type de la valeur de retour ? HRESULT est le type de retour c ca ? Je ne suis pas habitué a ce genre de notation [in, out]. "Fabrice MALAINGRE" a écrit dans le message de news:eLRSK$
Bonjour "mosfet",
Pour passer des tableaux de C++ vers VB (et vice versa), il faut utiliser
le
type SafeArray.
Dans l'IDL de ton composant C++ cela donne quelque chose du genre : => [id(1), helpstring("method TakeMyArray")] HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
Quant au code C++, la création du SafeArray s'effectue via la méthode "SafeArrayCreateVector" où tu doit désigner le type des éléments contenus dans le tableau ("VT_I4" pour un long).
Cordialement
____________________________ Fabrice MALAINGRE Architecte Logiciel - Chef de Projet THEORIS - www.theoris.fr
merci bcp. Au moins j'avance un peu.
Par contre dois je utiliser le Classwirard pour ca ou ecrire directement
dans le .odl ?
Pourriez vous me décrypter cette ligne :
HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) *
pData );
dans la ligne au dessus quelles sont les paramètres et quel est le type de
la valeur de retour ?
HRESULT est le type de retour c ca ?
Je ne suis pas habitué a ce genre de notation [in, out].
"Fabrice MALAINGRE" <nospam@theoris.fr> a écrit dans le message de
news:eLRSK$T9DHA.548@TK2MSFTNGP11.phx.gbl...
Bonjour "mosfet",
Pour passer des tableaux de C++ vers VB (et vice versa), il faut utiliser
le
type SafeArray.
Dans l'IDL de ton composant C++ cela donne quelque chose du genre :
=> [id(1), helpstring("method TakeMyArray")] HRESULT TakeMyArray([in, out]
long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
Quant au code C++, la création du SafeArray s'effectue via la méthode
"SafeArrayCreateVector" où tu doit désigner le type des éléments contenus
dans le tableau ("VT_I4" pour un long).
Cordialement
____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr
merci bcp. Au moins j'avance un peu. Par contre dois je utiliser le Classwirard pour ca ou ecrire directement dans le .odl ? Pourriez vous me décrypter cette ligne :
HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
dans la ligne au dessus quelles sont les paramètres et quel est le type de la valeur de retour ? HRESULT est le type de retour c ca ? Je ne suis pas habitué a ce genre de notation [in, out]. "Fabrice MALAINGRE" a écrit dans le message de news:eLRSK$
Bonjour "mosfet",
Pour passer des tableaux de C++ vers VB (et vice versa), il faut utiliser
le
type SafeArray.
Dans l'IDL de ton composant C++ cela donne quelque chose du genre : => [id(1), helpstring("method TakeMyArray")] HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) * pData );
Quant au code C++, la création du SafeArray s'effectue via la méthode "SafeArrayCreateVector" où tu doit désigner le type des éléments contenus dans le tableau ("VT_I4" pour un long).
Cordialement
____________________________ Fabrice MALAINGRE Architecte Logiciel - Chef de Projet THEORIS - www.theoris.fr
Fabrice MALAINGRE
Re bonjour "mosfet",
Pourriez vous me décrypter cette ligne : HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) *> pData ); dans la ligne au dessus quelles sont les paramètres et quel est le type de la valeur de retour ? HRESULT est le type de retour c ca ? Je ne suis pas habitué a ce genre de notation [in, out].
Tout d'abord il s'agit effectivement de syntaxe IDL.
Les méthodes d'un objet COM doivent toujours renvoyer un HRESULT. Celui-ci permet tout simplement de savoir si l'appel s'est bien passé.
La syntaxe [in, out] indique au compilateur IDL (MIDL.EXE) le sens de passage des paramètres. Information indispensable pour réaliser le Marshalling de l'interface (i.e. passage des paramètres d'un espace d'adressage à un autre).
Enfin, le type SAFEARRAY normalise le passage de tableau en COM/DCOM. Tu trouveras un très bon article sur le sujet (avec un exemple) dans "The Code Project" : http://www.codeproject.com/dll/ctovbarray_passing.asp
Cordialement ____________________________ Fabrice MALAINGRE Architecte Logiciel - Chef de Projet THEORIS - www.theoris.fr
Re bonjour "mosfet",
Pourriez vous me décrypter cette ligne :
HRESULT TakeMyArray([in, out] long * Data_Qty,
[ in, out ] SAFEARRAY(long) *> pData );
dans la ligne au dessus quelles sont les paramètres
et quel est le type de la valeur de retour ?
HRESULT est le type de retour c ca ?
Je ne suis pas habitué a ce genre de notation [in, out].
Tout d'abord il s'agit effectivement de syntaxe IDL.
Les méthodes d'un objet COM doivent toujours renvoyer un HRESULT.
Celui-ci permet tout simplement de savoir si l'appel s'est bien passé.
La syntaxe [in, out] indique au compilateur IDL (MIDL.EXE) le sens de
passage des paramètres.
Information indispensable pour réaliser le Marshalling de l'interface (i.e.
passage des paramètres d'un espace d'adressage à un autre).
Enfin, le type SAFEARRAY normalise le passage de tableau en COM/DCOM.
Tu trouveras un très bon article sur le sujet (avec un exemple) dans "The
Code Project" :
http://www.codeproject.com/dll/ctovbarray_passing.asp
Cordialement
____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr
Pourriez vous me décrypter cette ligne : HRESULT TakeMyArray([in, out] long * Data_Qty, [ in, out ] SAFEARRAY(long) *> pData ); dans la ligne au dessus quelles sont les paramètres et quel est le type de la valeur de retour ? HRESULT est le type de retour c ca ? Je ne suis pas habitué a ce genre de notation [in, out].
Tout d'abord il s'agit effectivement de syntaxe IDL.
Les méthodes d'un objet COM doivent toujours renvoyer un HRESULT. Celui-ci permet tout simplement de savoir si l'appel s'est bien passé.
La syntaxe [in, out] indique au compilateur IDL (MIDL.EXE) le sens de passage des paramètres. Information indispensable pour réaliser le Marshalling de l'interface (i.e. passage des paramètres d'un espace d'adressage à un autre).
Enfin, le type SAFEARRAY normalise le passage de tableau en COM/DCOM. Tu trouveras un très bon article sur le sujet (avec un exemple) dans "The Code Project" : http://www.codeproject.com/dll/ctovbarray_passing.asp
Cordialement ____________________________ Fabrice MALAINGRE Architecte Logiciel - Chef de Projet THEORIS - www.theoris.fr