Excel XLL - как зарегистрировать (xlfRegister) функцию через ее порядковый номер экспорта? - PullRequest
0 голосов
/ 11 января 2019

Я создаю XLL для Excel и пытаюсь зарегистрировать функции через XlfRegister.

Согласно документации Microsoft , вызываемая процедура (pxProcedure) может быть задана либо как строка (xltypeStr) для привязки к экспортируемому имени, либо как число (xltypeNum) для привязки к порядковый номер экспортируемой функции в XLL.

Кто-нибудь когда-нибудь заставлял это работать или это прослушивается?

Я пытаюсь сделать следующее:

XLOPER12 name;
Excel12(xlGetName, &name, 0); // return value check not shown here, but.. this call succeeds

auto args = new LPXLOPER12[10]();
args[0] = &name;       // dll name as returnd by xlGetName
args[1] = TempNum12(1);   // Exported ordinal of the XLL's function to invoke (1)
args[2] = MakeStr12(L"Q");  // type text
args[3] = MakeStr12(L"Test");  // name of the registered function in Excel
args[5] = MakeInt12(1); // register as macro

XLOPER12 regResultOper;
int xlResult = Excel12v(xlfRegister, &regResultOper, 10, args);
// memory clean up ommitted as not relevant to question

xlResult возвращается с 0 (xlretSuccess), однако regResultOper имеет тип xltypeErr с .val.err = 15 (xlerrValue).

Если я использую ту же функцию, но использую

args[1] = TempStr12(L"invoke1");   // Exported ordinal of the XLL's function to invoke (1)

регистрация работает просто отлично.

Мой файл def находится ниже, и я подтвердил через dumpbin, что XLL экспортирует invoke1 с порядковым номером 1.

LIBRARY

EXPORTS
xlAutoOpen
xlAutoAdd
xlAutoRemove
xlAutoClose
invoke1 @1

Есть ли способ зарегистрировать функцию через ее порядковый номер (на практике я хочу избежать экспорта по имени полностью из-за размера файла XLL), или это просто ошибка?

В настоящее время я использую Excel 2010 для проверки этого.

Спасибо

...