xlGetInst
适用于:Excel 2013 | Office 2013 | Visual Studio
返回当前正在调用 DLL 的 Microsoft Excel 实例的实例句柄。
Excel4(xlGetInst, LPXLOPER pxRes, 0); /* returns low part only */
Excel12(xlGetInst, LPXLOPER12 pxRes, 0); /* returns full handle */
参数
此函数没有参数。
属性值/返回值
(xltypeInt) 的实例句柄将位于 val.w 字段中。
备注
此函数可用于区分调用 DLL 的多个正在运行的 Excel 实例。
使用 Excel4 或 Excel4v 调用此函数时,返回的 XLOPER 整数变量是有符号的 16 位短 int。这只能包含 32 位 Windows 句柄的低 16 位。 从 Excel 2007 开始, XLOPER12 的整数变量是有符号的 32 位 int,因此包含整个句柄,无需循环访问所有打开的窗口。
重要
如果 xlGetInst 函数与 64 位版本的 Microsoft Excel 一起使用,则该函数将失败。 这是因为 xltypeInt 值类型宽度不足以容纳在这种情况下 Excel 返回的 64 位长句柄。 为此,Excel 2010 引入了一个名为 xlGetInstPtr 的新函数,该函数可在 32 位和 64 位版本的 Excel 中正确运行。
示例
以下示例将调用它的 Excel 最后一个副本的实例与调用它的 Excel 的当前副本进行比较。 如果它们相同,则返回 1;如果不是,则返回 0;如果函数失败,则返回 -1。
\SAMPLES\EXAMPLE\EXAMPLE.C
short WINAPI xlGetInstExample(void)
{
XLOPER12 xRes;
static HANDLE hOld = 0;
short iRet;
if (Excel12(xlGetInst, &xRes, 0) != xlretSuccess)
iRet = -1;
else
{
HANDLE hNew;
hNew = (HANDLE)xRes.val.w;
if (hNew != hOld)
iRet = 0;
else
iRet = 1;
hOld = hNew;
}
return iRet;
}