J'ai ajouté 3 paramètres booléens optionnels à une méthode trouvée dans une DLL VB6. La classe qui l'héberge est MultiUse (public), et la méthode elle-même est Private. La classe implémente une interface spécifique à partir d'un TLB, permettant des appels publics à cette méthode.Est-il possible que C# ait des problèmes pour appeler les méthodes VB6 qui ont des paramètres optionnels?
Après avoir ajouté les 3 paramètres optionnels du côté VB6, j'ai modifié le code C# associé de façon à ce qu'il spécifie les 3 paramètres optionnels. Il construit bien ... Cependant, quand je tente d'exécuter ce code, il échoue avec le message d'erreur suivant:
Méthode non trouvée: « Boolean MyTLBName.IMyClassName.MyMethod (System.Object, système . String, Boolean, Boolean, Int32, Int32 ByRef, System.Object, System.Object, System.Object, Booléen, Booléen, Booléen) '.
Notez comment les 3 paramètres booléens sont affichés dans le message d'erreur? Ça me va bien ... Je sais que j'ai spécifié ces 3 booléens en appelant la méthode de C#.
Méfiant, j'ai vérifié l'interface MyTLBName.IMyClassName dans OLEView, et a vu ceci:
[id (0x60030000)]
HRESULT MyMethod(
//Cut out the other parameters - they are working fine.
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyFirstOptionalBoolean,
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMySecondOptionalBoolean,
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyThirdOptionalBoolean,
[out, retval] VARIANT_BOOL* __MIDL_0324);
Encore une fois, les 3 paramètres optionnels sont visibles, et regardez bien .
Ça me semble que ça devrait marcher ... mais peut-être qu'il me manque quelque chose.
Y at-il un moyen de le faire fonctionner sans avoir à créer une autre version de "MyMethod" dans le TLB? (Avec un nom différent, et ces 3 paramètres si nécessaire plutôt qu'optionnel)
+1 Wow. Quelle douleur. –
Je vais donner un coup de feu ... merci pour la pointe –
Le lien de la république technologique est brisé. –