Существует два способа использования 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-ДНК это на самом деле не требуется.
Все это стало немного запутанным за эти годы ...