Proporciona un método para una secuencia de comandos de macro que llama a código nativo. Normalmente, se utiliza para mostrar una interfaz gráfica del usuario personalizada y desarrollada en una tecnología distinta a Flash.
Cuando la secuencia de comandos llama a callExternalFunction, el nombre de archivo DLL especificado se carga de la carpeta que contiene el archivo de secuencia de comandos actualmente en ejecución. La extensión DLL se añade automáticamente al nombre de archivo especificado. El nombre de archivo DLL no puede incluir elementos de ruta y debe incluir un nombre de archivo sin extensión como myMacroExtension.
GetProcAddress se utiliza para localizar la función que se identifica mediante el parámetro sFunctionName.
Llamada de muestra:
designer.callExternalFunction("DesignerExtension", "ShowMyDialog", "user data here");
Esta llamada carga un archivo DLL llamado DesignerExtension.dll en el mismo directorio en el que está instalada la macro, busca una función denominada ShowMyDialog y pasa la cadena "datos de usuario aquí" como una cadena de caracteres extendidos (const wchar_t * ).
La función puede devolver una cadena que, a su vez, devuelve la llamada de designer.callExternalFunction. La cadena se devuelve como HGLOBAL que contiene una cadena de caracteres extendidos.
El siguiente ejemplo de una función en un DLL, muestra la cadena transferida en un cuadro de diálogo y devuelve "sí" o "no" dependiendo de la opción que elija el usuario. La función C debe tener el prototipo de función igual al de este ejemplo.
extern "C" __declspec(dllexport) HGLOBAL _cdecl ShowMyDialog(HWND hwndParent, const wchar_t *pszArgument)
{
int nResult = ::MessageBox(hwndParent, pszArgument, L"DLL Function Sample", MB_YESNO);
// Allocate some memory for the result string
HGLOBAL hMem = GlobalAlloc(0, 64);
if (!hMem)
return 0;
wchar_t *pMem = (wchar_t *)GlobalLock(hMem);
wcscpy_s(pMem, 30, nResult == IDYES ? L"yes" : L"no");
::GlobalUnlock(hMem);
return hMem;
}
Sintaxis
designer.callExternalFunction ( STRING param1, STRING param2, STRING param3)
Parámetros
param1
|
Cadena que representa el nombre del archivo DLL. Especifique el nombre de archivo raíz del archivo DLL sin la extensión.
|
param2
|
Una cadena que representa el nombre de la función.
|
param3
|
El parámetro de cadena que se pasa a la función.
|