Mam app VBScript wywołujące obiekty C# zarejestrowane w COM. Mogę przekazać obiekt COM do wywołania COM, a także otrzymać z powrotem obiekt prymitywny lub COM, ale nie mogę zrobić obu jednocześnie! Jeśli spróbuję odzyskać dowolną wartość z wywołania, jednocześnie przekazując obiekt COM, otrzymuję wyjątek „Nieprawidłowe wywołanie procedury lub argument”

Dim foo
Set foo = Server.CreateObject("Foo")
foo.SetProperty(1)

Dim bar
Set bar = Server.CreateObject("Bar")
Dim return
Set return = bar.Do(foo)

Jeśli ta ostatnia linia to po prostu bar.Do(foo), to działa dobrze.

Również, czy to jest

Set return = bar.Do(foo)

Lub

return = bar.Do(foo)

Powoduje ten sam błąd w tym przypadku.

Moje klasy COM to klasy, które mają ujawnione tylko metody i implementują interfejs. Otrzymuję ten błąd, mając do czynienia tylko z intami, długimi i ciągami.

3
Jomasi 20 lipiec 2011, 19:33

2 odpowiedzi

Najlepsza odpowiedź

Jestem trochę zardzewiały w tym obszarze, ale jeśli twoja metoda zwraca int lub ciąg znaków, nie powinien to być twój kod, przeczytaj:

return = bar.Do(foo)

Zamiast

Set return = bar.Do(foo)
2
Eddy 20 lipiec 2011, 19:46
Masz rację i próbowałem zarówno w obu przypadkach, w których zwracam obiekt, jak i int.
 – 
Jomasi
20 lipiec 2011, 19:50

"return = bar.Do(foo)" powinno działać, o ile Bar.Do faktycznie coś zwraca. Jak definiuje się Bar.Do?

0
Polyfun 20 lipiec 2011, 20:10
To proste jak public int Do(Foo foo) { return 1; } Jest zdefiniowany w interfejsie IBar w ten sam sposób.
 – 
Jomasi
20 lipiec 2011, 20:30