如果返回值为这二种类型中的一种,你的 DLL 必需清除,并将控制权返还给 Excel。 C API 回调 操作,会在 接到到这种返回值后失效,除了 xlFree 函数。
实例这个实例使用 Excel12 函数选择调用的单元格
\SAMPLES\EXAMPLE\EXAMPLE.C.
注意 这个函数调用一个命令宏 xlcSelect 因此只会在 XLM 宏表中调用时有效。
short WINAPI Excel12Example(void) { XLOPER12 xRes; Excel12(xlfCaller, &xRes, 0); Excel12(xlcSelect, 0, 1, (LPXLOPER12)&xRes); Excel12(xlFree, 0, 1, (LPXLOPER12)&xRes); return 1; } Excel4v/Excel12v从 DLL/XLL 或代码资源中调用 Excel 内部的工作表函数、宏表函数或命令、或 XLL-only 特定函数或命令
所有最新版本的 Excel4v 都支持 Excel4v 函数。只有 Excel 2007 及其后续版本支持 Excel12v。
这些函数只在 DLL/XLL 回调 Excel 功能可以使用。它们还可以间接的通过 VBA 来调用。除此以外,其它的任何时间都不可以调用这两个函数。例如,它们不能在 操作系统调用 DLL时调用 DllMain 时直接调用这个函数。 DLL 创建的线程也不能调用这个函数。
Excel4 和 Excel12 接收堆栈上的可变长度参数列表,然而 上面的两个函数只接收数组形式的参数。在其它方面,这两组函数是等效的。
函数原型 int _cdecl Excel4v(int iFunction, LPXLOPER pxRes, int iCount,LPXLOPER rgx[]); int _cdecl Excel12v(int iFunction, LPXLOPER12 pxRes, int iCount,LPXLOPER12 rgx[]); 参数iFunction (int)
一个数字类型,表明你要调用的 命令、函数 或 特殊函数。有效的 iFunction 值,参考 “Remarks” 一节。
pxRes (LPXLOPER or LPXLOPER12)
XLOPER 或 XLOPER12 类型的指针,用于保留函数的结果值。
iCount (int)
要传送给函数的参数数量。到 Excel 2003 版本,这里的数值最大为30。但是在 Excel 2007 版本,最大数值是 255。
rgx (LPXLOPER[] 或 LPXLOPER12[])
包含要传送给函数的参数数组。数组中的所有参数必需指向 XLOPERs 或 XLOPER12s 类型。
属性值 / 返回值这些函数的返回值 与 Excel4 和 Excel12 是相同的。
备注当参数的数量是不是固定,使用这些函数更好。例如,当使用 xlfRegister 注册函数时,参数数量依赖于注册的函数的参数数量。这种情况下就可以使用这些函数。或者当你为 Excel4 或 Excel12 建一个包装函数时,你需要转换变量参数列表才能提供给 Excel4 或 Excel12 。而使用 Excel 4v 或 Excel12v 只需要调用一个包含了所有函数的参数数组就可以了。
实例在 SAMPLES\FRAMEWRK\FRAMEWRK.C 包含了 Excel 和 Excel12f 函数的实例代码。