У меня есть конструкция реализации .NET некоторой утилиты и сценарий .WSC
, который создает экземпляр объекта .NET.Цель состоит в том, чтобы исключить сценарий WSC
, а также создать экземпляр и вызвать реализацию .NET напрямую.Но это обнаружило проблему именования.
Класс, определенный в WSC, содержит несколько методов.Одним из таких методов является Finalize()
.Имя функции зарезервировано в .NET, так как оно используется для управления временем жизни и GC.Поэтому WSC
вызывает функцию .NET с другим именем:
<?xml version="1.0"?>
<component>
<public>
<method name="Finalize"/>
</public>
<object id="wrapper" progid="JS.Wrapper"/>
<script language="JScript">
<![CDATA[
// Processes last required steps and closes all logs
function Finalize() {
return wrapper.Finish();
}
// Any other function
function Foo() {
wrapper.Foo();
}
]]>
</script>
</component>
. Класс .NET реализует функцию Finish
:
[ComVisible(true)]
[ProgId("JS.Wrapper")]
public class MyCom
{
// Processes last required steps and closes all logs
public void Finish()
{
}
public void Foo()
{
}
}
Существуют тысячи сценариев, которыевызвать все функции Foo () и Bar ().И большинство из них также вызывает функцию Finalize
.Поэтому невозможно изменить имя функции на интерфейсе COM.
- Как сделать функцию Finish доступной для COM-видимости с именем
Finalize
? - Есть ли способреализовать две функции Finalize, одну для среды выполнения .NET и одну, экспортируемую через интерфейс COM.
- Можно ли реализовать интерфейс COM явно, т.е. создать пользовательскую реализацию интерфейса COM?
Существует атрибут ComAliasName , который можно использовать для отображения свойства, индексатора, поля, параметра или возврата с псевдонимом.Но его нельзя использовать для имени метода.Как метод сделать видимым как псевдоним?