Stellt Makroskripts eine Methode für den Aufruf von systemeigenem Code bereit. Sie ermöglicht beispielsweise den Aufruf einer benutzerdefinierten grafischen Benutzeroberfläche, die in einer anderen Technologie als Flash entwickelt wurde.
Wenn das Skript callExternalFunction aufruft, wird der angegebene DLL-Dateiname aus dem Ordner geladen, der die derzeit ausgeführte Skriptdatei enthält. Die DLL-Erweiterung wird dem angegebenen Dateinamen automatisch hinzugefügt. Der DLL-Dateiname darf keine Pfadelemente beinhalten und muss einen Dateinamen ohne Erweiterung (wie beispielsweise myMacroExtension) enthalten.
Mit GetProcAddress wird die durch den Parameter sFunctionName angegebene Funktion gesucht.
Beispielaufruf:
designer.callExternalFunction("DesignerExtension", "ShowMyDialog", "user data here");
Dieser Aufruf lädt eine DLL namens DesignerExtension.dll aus dem gleichen Verzeichnis, in dem das Makro installiert ist, sucht nach einer Funktion namens ShowMyDialog und übergibt die Zeichenfolge „user data here“ als Zeichenfolge für breite Zeichen (const wchar_t *).
Die Funktion kann eine Zeichenfolge zurückgeben, die vom Aufruf designer.callExternalFunction zurückgegeben wird. Die Zeichenfolge wird als HGLOBAL mit einer Zeichenfolge für breite Zeichen zurückgegeben.
Das folgende Beispiel einer Funktion in einer DLL zeigt die übergebene Zeichenfolge in einem Dialogfeld an und gibt, je nachdem, auf welche Option der Benutzer klickt, „Ja“ oder „Nein“ zurück. Die C-Funktion muss die Funktion prototype wie in diesem Beispiel enthalten.
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;
}
Syntax
designer.callExternalFunction ( STRING param1, STRING param2, STRING param3)
Parameter
param1
|
Eine Zeichenfolge, die den DLL-Namen darstellt. Geben Sie den Stammdateinamen der DLL ohne die Dateinamenerweiterung an.
|
param2
|
Eine Zeichenfolge, die den Funktionsnamen darstellt.
|
param3
|
Der Zeichenfolgenparameter, der an die Funktion übergeben wird.
|