Видимость Excel ДНК и RTD сервера COM - PullRequest
0 голосов
/ 18 мая 2019

В каждом образце Excel ДНК RTD сервер RTD вкл. помечен как видимый COM. Пример: https://github.com/Excel-DNA/Samples/blob/master/RtdClocks/RtdClock-ExcelRtdServer/RtdClockServer.cs

Основываясь на моем тестировании, когда в Excel добавляется плагин Excel ДНК, видимость COM не требуется.

Какова причина, чтобы сделать RTD Impl. COM виден?

1 Ответ

2 голосов
/ 18 мая 2019

Существует два способа использования RTD-сервера на основе Excel-DNA из Excel:

  • без регистрации и UDF-оболочка, которая вызывает внутренние вызовы XlCall.RTD(...) или
  • путем регистрации типов (с помощью вызова ExcelDna.ComInterop.ComServer.DllRegisterServer()) и последующего непосредственного вызова функции =RTD(...).

Для первого нормального случая вы правы, ComVisible не требуетсядля RTD-сервера - Excel-DNA внутренне выполняет подключение и выставляет класс без регистрации.Во втором случае требуется ComVisible (либо явно, либо без указания директивы ComVisible для типа или сборки - поскольку по умолчанию для ComVisible установлено значение 'true') для типа, который будет зарегистрирован как экспорт COM.

Эта история немного усложняется, если вы пытаетесь использовать функцию-обертку, но у вас есть стабильный ProgId, зарегистрированный в Excel, чтобы можно было использовать «старые значения» при повторном открытии сохраненного листа.В этом случае вам нужно пройти регистрацию COM и изменить свою оболочку на XlCall.Excel(XlCall.xlfRtd, ...).

Так что вы правы, что для большинства образцов Excel-ДНК это на самом деле не требуется.

Все это стало немного запутанным за эти годы ...

...