xlGetInst
Aplica-se a: Excel 2013 | Office 2013 | Visual Studio
Retorna o identificador de instância da instância do Microsoft Excel que atualmente está chamando uma DLL.
Excel4(xlGetInst, LPXLOPER pxRes, 0); /* returns low part only */
Excel12(xlGetInst, LPXLOPER12 pxRes, 0); /* returns full handle */
Parâmetros
Essa função não tem argumentos.
Valor de propriedade/Valor de retorno
O identificador de instância (xltypeInt) estará no campo val.w .
Comentários
Essa função pode ser usada para distinguir entre várias instâncias em execução do Excel que estão chamando a DLL.
Quando você está chamando essa função usando Excel4 ou Excel4v, a variável de inteiro XLOPER retornada é um int curto assinado de 16 bits. Isso só é capaz de conter os 16 bits baixos do identificador do Windows de 32 bits. A partir do Excel 2007, a variável inteiro do XLOPER12 é um int assinado de 32 bits e, portanto, contém todo o identificador, removendo a necessidade de iterar todas as janelas abertas.
Importante
Se a função xlGetInst for usada com a versão de 64 bits do Microsoft Excel, a função falhará. Isso ocorre porque o tipo de valor xltypeInt não é largo o suficiente para manter a alça de 64 bits de comprimento retornada pelo Excel nesse caso. Para isso, o Excel 2010 introduziu uma nova função chamada xlGetInstPtr, que é executada corretamente com as versões de 32 bits e 64 bits do Excel.
Exemplo
O exemplo a seguir compara a instância da última cópia do Excel que a chamou à cópia atual do Excel que a chamou. Se forem iguais, ele retornará 1; se não, ele retorna 0; se a função falhar, ela retornará -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;
}
Confira também
Funções da API de C que podem ser chamadas apenas de uma DLL ou XLL