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;
}

См. также

xlGetHwnd

xlGetInstPtr

Функции API C, которые можно вызывать только из библиотеки DLL или XLL