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

Problème passage de paramètre...

14 réponses
Avatar
zobio
Bonjour à tous,

Je vais essayer d'être le plus clair possible mais le problème n'est pas
simple... :(

Je bloque sur le passage d'un paramètre à une fonction. La fonction en
question est décrite dans un assenbly n'étant pas à moi, il s'agit d'une
fonction de Rave Report (moteur d'impression).

Voici le prototype de la fonction :

NewDataObject(TRaveDataObject.@MetaTRaveDataObject DataObjectClass)

le but de la fonction est de créer un objet dont le type sera passé en
paramètre, et c'est la que ca bloque. Comment lui passer ce paramètre ?

Si je passe un objet de type TRaveDataObject j'ai l'erreur :
Argument '1' : impossible de convertir de 'Nevrona.Rave.TRaveDataObject' en
'Nevrona.Rave.TRaveDataObject.@MetaTRaveDataObject'

Si j'essaye d'instancier un objet de type
TRaveDataObject.@MetaTRaveDataObject'
J'ai l'erreur suivante :
Le type ou le nom d'espace de noms 'MetaTRaveDataObject' n'existe pas dans
la classe ou l'espace de noms 'Nevrona.Rave.TRaveDataObject' (une référence
d'assembly est-elle manquante ?)

Alors que la classe en question m'est proposée par l'intelisense...


J'ai l'impression d'être dans un impasse, je ne comprends plus rien.
J'ai essayé de passer par System.Type ca ne marche pas non plus.

Si kkun à une idée je suis preneur.
Merci d'avance

10 réponses

1 2
Avatar
Patrick Philippot
Bonjour,

Utilisez la méthode GetType de l'objet dont vous voulez passer le type.
GetType retourne un objet de type Type. GetType est accessible sur tout
objet puisque c'est une méthode de Object.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
zobio
En fait j'avais oublié de dire que j'avais déja utilisez cette méthode.
J'obtiens l'erreur suivante :

Argument '1' : impossible de convertir de 'System.Type' en
'


"Patrick Philippot" a écrit dans le
message de news: %
Bonjour,

Utilisez la méthode GetType de l'objet dont vous voulez passer le type.
GetType retourne un objet de type Type. GetType est accessible sur tout
objet puisque c'est une méthode de Object.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr



Avatar
Merlin
zobio a écrit :
Voici le prototype de la fonction :
NewDataObject( DataObjectClass)
Si je passe un objet de type TRaveDataObject j'ai l'erreur :
Argument '1' : impossible de convertir de 'Nevrona.Rave.TRaveDataObject' en
''



Cela signifie selon toute apparence que le fameux paramètre n'est pas
une classe mais un type (les metadata, métadonnées).

il faut donc passer typeof(laclasse) comme paramètre à mon avis.
Si ce type est dynamiquement attribué au runtime il est préférable
d'utiliser GetType().

--

///3rL1n________
www.e-naxos.com
gratuit section "Delphi Stargate"
Avatar
Merlin
zobio a écrit :
Argument '1' : impossible de convertir de 'System.Type' en
'



et avec typeof(Nevrona.Rave.TRaveDataObject) ?

--

///3rL1n________
www.e-naxos.com
gratuit section "Delphi Stargate"
Avatar
zobio
Même erreur avec typeof, en fait typeof utilise aussi System.type

Pour tests, j'ai utiliser cette fonction dans un projet delphi 2005 (.net),
en donnant la classe (pas un objet, directement la classe!) en paramètre ca
marche Impec.
Visiblement on peut passer une classe en paramètre a une fonction Delphi.
Le tout est de trouver comment faire la même chose (sans le system.Type) en
C#

Si quelqu'un ose me dire d'utiliser Delphi, je me fache ! lol




"Merlin" a écrit dans le message de news:

zobio a écrit :
Argument '1' : impossible de convertir de 'System.Type' en
'



et avec typeof(Nevrona.Rave.TRaveDataObject) ?

--

///3rL1n________
www.e-naxos.com
gratuit section "Delphi Stargate"




Avatar
zobio
J'ai éssayé :
typeof(Nevrona.Rave.TRaveDataObject)

Argument '1' : impossible de convertir de 'System.Type' en
''

Le problème est toujours le même, a savoir que je lui donne un paramètre de
type System.Type alors qu'il attend un type différent.




"Merlin" a écrit dans le message de news:

zobio a écrit :
Voici le prototype de la fonction :
NewDataObject( DataObjectClass)
Si je passe un objet de type TRaveDataObject j'ai l'erreur :
Argument '1' : impossible de convertir de 'Nevrona.Rave.TRaveDataObject'
en ''



Cela signifie selon toute apparence que le fameux paramètre n'est pas une
classe mais un type (les metadata, métadonnées).

il faut donc passer typeof(laclasse) comme paramètre à mon avis.
Si ce type est dynamiquement attribué au runtime il est préférable
d'utiliser GetType().

--

///3rL1n________
www.e-naxos.com
gratuit section "Delphi Stargate"




Avatar
Patrick Philippot
Et GetType(votre_objet) as


Si ça ne fonctionne pas et que la conversion est toujours impossible, il
faut peut-être se demander si l'objet en question est du bon type.

D'après ce que je lis
'' n'est certainement
pas la même chose que 'Nevrona.Rave.TRaveDataObject'

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
zob
J'ai aussi essayé le as

Le probleme est que la classe @MetaTRaveObject est innacessible, je ne peux
pas l'utiliser, j'ai une erreur me disant que TRaveDataObject n'a pas de
définition pour @MetaTRaveObject
alors que cette classe est donnée par l'intellisense. En fait c'est le meme
problème que quand je veux déclarer une instance de ce type, c'est
impossible...
Et c'est la tout le problème.
C'est ce qu'attend la fonction en paramètre, et je ne peux acceder à ce
type, j'ai systématiquement une erreur de compilation.

J'ai essayé dans d'autres projets, je retrouve ces classes "@MetaMaClasse"
dans des classes MaClasse par exemple, mais toujours innutilisable.
Je ne comprends pas d'ou sortent ces @Meta... et surtout comment les
utiliser.

D'autre part pour information, dans le projet delphi.net qui utilise la meme
fonction l'infobulle sur la fonction indique que le paramètre a fournir et
du type
Nevrona.Rave.TRaveDataObject
Alors qu'en C# l'infobulle me dit qu'il faut fournir un


Je ne comprends pas...

Merci beaucoup pour votre aide, je comprendrais que vous jetiez l'éponge
etant donné la galère que c'est.
Je continue a chercher...



"Patrick Philippot" a écrit dans le
message de news: %
Et GetType(votre_objet) as


Si ça ne fonctionne pas et que la conversion est toujours impossible, il
faut peut-être se demander si l'objet en question est du bon type.

D'après ce que je lis ''
n'est certainement pas la même chose que 'Nevrona.Rave.TRaveDataObject'

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr



Avatar
Patrick Philippot
zob wrote:
J'ai aussi essayé le as

Le probleme est que la classe @MetaTRaveObject est innacessible, je
ne peux pas l'utiliser, j'ai une erreur me disant que TRaveDataObject
n'a pas de définition pour @MetaTRaveObject
alors que cette classe est donnée par l'intellisense. En fait c'est
le meme problème que quand je veux déclarer une instance de ce type,
c'est impossible...
Et c'est la tout le problème.



Il ne vous manque pas une référence par hasard? Ne pas confondre Import
et référence. L'import suffit à Intellisense mais pas au compilateur.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
zob
C'est ce que je me suis dis, mais ce n'est pas le cas... (dommage)
J'ai référencer les deux Dll utiles, et en plus de ca il n'y en a pas
d'autres dans le Package Rave Report


"Patrick Philippot" a écrit dans le
message de news: %
zob wrote:
J'ai aussi essayé le as
Le probleme est que la classe @MetaTRaveObject est innacessible, je
ne peux pas l'utiliser, j'ai une erreur me disant que TRaveDataObject
n'a pas de définition pour @MetaTRaveObject
alors que cette classe est donnée par l'intellisense. En fait c'est
le meme problème que quand je veux déclarer une instance de ce type,
c'est impossible...
Et c'est la tout le problème.



Il ne vous manque pas une référence par hasard? Ne pas confondre Import et
référence. L'import suffit à Intellisense mais pas au compilateur.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr



1 2