Передача строго типизированных аргументов в .NET COM-взаимодействии

У меня есть два класса .NET, доступных через COM-взаимодействие - скажем, Foo и Bar, и мне нужно передать аргумент типа Foo методу, определенному в Bar. Примерно так:

[ComVisible(true)]
public class Foo
{
    // whatever
}

[ComVisible(true)]
public class Bar
{
    public void Method(Foo fff)
    {
        // do something with fff
    }
}

Когда я запускаю следующую VBS (используя cscript.exe):

set foo = CreateObject("TestCSProject.Foo")
set bar = CreateObject("TestCSProject.Bar")
call bar.Method(foo)

Я получаю сообщение об ошибке:

D: \ test.vbs (3, 1) Ошибка выполнения Microsoft VBScript: недопустимый вызов процедуры или аргумент: 'bar.Method'

Однако, если я изменю объявление метода на это:

    public void Method(object o)
    {
        Foo fff = (Foo)o;
        // do something with fff
    }

, все будет работать. Я пробовал магию с интерфейсами, атрибутами и т. Д., Но пока безуспешно.

Есть какие-нибудь идеи?

Большое спасибо

6
задан Elephantik 25 January 2011 в 14:18
поделиться