Excel XLL-如何通过其导出序号注册(xlfRegister)函数?

时间:2019-01-11 13:14:29

标签: c++ excel excel-2010 xll

我正在为Excel构建XLL,并试图通过XlfRegister注册功能。

根据Microsoft's documentation,可以将要调用的目标过程(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确实导出了序号为1的invoke1。

LIBRARY

EXPORTS
xlAutoOpen
xlAutoAdd
xlAutoRemove
xlAutoClose
invoke1 @1

是否可以通过其序数来注册一个函数(实际上,由于XLL的文件大小,我想避免完全按名称导出),或者这仅仅是个错误?

我目前正在使用Excel 2010进行测试。

谢谢

0 个答案:

没有答案