我正在为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, ®ResultOper, 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进行测试。
谢谢