xlGetInst
Область применения: Excel 2013 | Office 2013 | Visual Studio
Возвращает дескриптор экземпляра Microsoft Excel, который в настоящее время вызывает библиотеку DLL.
Excel4(xlGetInst, LPXLOPER pxRes, 0); /* returns low part only */
Excel12(xlGetInst, LPXLOPER12 pxRes, 0); /* returns full handle */
Параметры
Эта функция не имеет аргументов.
Значение свойства и возвращаемое значение
Дескриптор экземпляра (xltypeInt) будет находиться в поле val.w .
Замечания
Эту функцию можно использовать для различения нескольких запущенных экземпляров Excel, вызывающих библиотеку DLL.
При вызове этой функции с помощью Excel4 или Excel4v возвращаемая целочисленная переменная XLOPER представляет собой подписанный 16-разрядный короткий int. Он может содержать только 16 бит 32-разрядного дескриптора Windows. Начиная с Excel 2007, целочисленная переменная XLOPER12 является 32-разрядным int со знаком и, следовательно, содержит весь дескриптор, избавляя от необходимости выполнять итерацию всех открытых окон.
Важно!
Если функция xlGetInst используется с 64-разрядной версией Microsoft Excel, функция завершится ошибкой. Это связано с тем, что тип значения xltypeInt недостаточно широк для хранения 64-разрядного дескриптора, возвращаемого Excel в данном случае. Для этого в 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;
}
См. также
Функции API C, которые можно вызывать только из библиотеки DLL или XLL