Biedt een methode voor een macroscript om native code aan te roepen. Wordt meestal gebruikt om een grafische gebruikersinterface weer te geven die is ontwikkeld met een andere technologie dan Flash.
Als het script callExternalFunction aanroept, wordt de opgegeven DLL-bestandsnaam geladen vanuit de map waarin het scriptbestand staat dat op dat moment wordt uitgevoerd. De extensie DLL wordt automatisch toegevoegd aan de bestandsnaam. De DLL-bestandsnaam mag geen padelementen bevatten en moet alleen uit een bestandsnaam bestaan zonder extensie, bijvoorbeeld myMacro.
Met GetProcAddress wordt de functie gezocht die wordt geïdentificeerd door de parameter sFunctionName.
Voorbeeld van een aanroep:
designer.callExternalFunction("DesignerExtension", "ShowMyDialog", "user data here");
Met deze aanroep wordt een DLL geladen met de naam DesignerExtension.dll uit dezelfde map als de installatiemap van de macro, wordt de functie ShowMyDialog aangeroepen, en wordt de tekenreeks "user data here" doorgegeven als 'wide character'-tekenreeks (const wchar_t *).
De functie kan een tekenreeks retourneren die is geretourneerd door de aanroep designer.callExternalFunction. De tekenreeks wordt geretourneerd als HGLOBAL met een 'wide character'-tekenreeks.
In het volgende voorbeeld van een functie in een DLL wordt de doorgegeven tekenreeks getoond in een dialooogvenster en wordt "ja" of "nee" geretourneerd, afhankelijk van de optie waarop de gebruiker klikt. De functie C moet de functie prototype hebben zoals dit voorbeeld.
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;
}
Syntaxis
designer.callExternalFunction ( STRING param1, STRING param2, STRING param3)
Parameters
param1
|
Een tekenreeks die staat voor de DLL-naam. Geef de basisbestandsnaam van de DLL op zonder de extensie.
|
param2
|
Een tekenreeks die staat voor de functienaam.
|
param3
|
De tekenreeksparameter die wordt doorgegeven aan de functie.
|
Geeft als resultaat
Tekenreeks.