Dodałem 3 opcjonalne parametry boolowskie do metody znalezionej w bibliotece DLL VB6. Klasa, w której się znajduje, to MultiUse (publiczna), a sama metoda jest prywatna. Klasa implementuje określony interfejs z TLB, umożliwiając publiczne wywołania tej metody.Czy jest możliwe, że C# ma problemy z wywoływaniem metod VB6, które mają opcjonalne parametry?
Po dodaniu 3 opcjonalnych parametrów po stronie VB6, zmodyfikowałem powiązany kod C# tak, aby określił 3 opcjonalne parametry. Jest zbudowany w porządku ... Jednak kiedy próbuję uruchomić ten kod, to nie powiedzie się z następującym komunikatem o błędzie:
Method not found: „Boolean MyTLBName.IMyClassName.MyMethod (System.Object, System. String, Boolean, Boolean, Int32, Int32 ByRef, System.Object, System.Object, System.Object, Boolean, Boolean, Boolean) ".
Zauważ, jak wszystkie 3 parametry boolowskie są wyświetlane w komunikacie o błędzie? Wygląda dobrze dla mnie ... Wiem, że określiłem te 3 wartości logiczne, wywołując metodę z C#.
podejrzane, że zaznaczone na interfejs MyTLBName.IMyClassName w OLEView i widział tak:
[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);
Ponownie, 3 opcjonalne parametry są widoczne i wyglądać dobrze .
Wydaje mi się, że powinno działać ... ale może czegoś brakuje.
Czy jest jakiś sposób, żeby to zadziałało bez konieczności tworzenia kolejnej wersji "MyMethod" w TLB? (Z inną nazwą i tymi 3 parametrami w razie potrzeby, a nie opcjonalnie)
+1 Wow. Co za ból. –
Mam zamiar dać temu szansę ... dzięki za podpowiedź –
Link do technologii technicznej jest zepsuty. –