Echec d'appel d'une fonction COM

Echec d'appel d'une fonction COM - C++ - Programmation

Marsh Posté le 18-12-2004 à 20:48:27    

salut,
 
j'ai une dll COM avec la fonction suivante :

Code :
  1. Foo::func(BSTR str)


 
Lorsque j'appelle ma fonction à partir d'un programme VB avec comme paramètre une String, ca foire.
Par contre si je mets en paramètre une fonction qui retourne une String ou une chaine constante c'est ok.
 
En clair,

Code :
  1. Function getStr() as String
  2.   getStr="hello"
  3. End Function
  4. Dim str as String
  5. str = "hello"
  6. Call obj.func(str) 'ECHEC
  7. Call obj.func("hello" ) 'OK
  8. Call obj.func(getStr) 'OK


 
Quelqu'un sait pourquoi ?

Reply

Marsh Posté le 18-12-2004 à 20:48:27   

Reply

Marsh Posté le 19-12-2004 à 02:04:40    

En substance, ça a l'air d'être parce que lorsque tu utilises le type String directement, il passe la chaîne par référence plutôt que par valeur, et boum:
http://support.microsoft.com/kb/118643/EN-US/
 
Essaye soit de modifier la façon dont ton objet COM est déclaré en VB (quoique, je crois que ça ne se change pas), soit de déclarer ta chaîne en Variant. Ou alors, google pour voir comment convertir des chaînes VB en chaînes C-like.

Reply

Marsh Posté le 19-12-2004 à 13:27:20    

Effectivement la chaine est passée par référence donc l'appel de ma fonction échoue. En mettant

Code :
  1. Foo::func(BSTR *str)

ca passe pour la String, mais plus pour la chaine constante et le retour de getStr ce qui est finalement logique.
 
pfff ce que c'est lourd de faire du vb...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed