nAttr | (Long) Atributy jak volat funkci.
0 - Funkce je v 32-bit DLL deklarována jako __cdecl (v 64-bit je vždy jako __fastcall, hodnota je ignorována).
1 - Funkce je v 32-bit DLL deklarována jako __stdcall (v 64-bit je vždy jako __fastcall, hodnota je ignorována). |
---|---|
nRetDt | (Long) Datový typ vrácené hodnoty volané funkce v DLL.
3 - Celé číslo (1 - 4 bajty), předává se kopie hodnoty.
4 - Reálné číslo 4 bajty, předává se kopie hodnoty.
5 - Reálné číslo 8 bajtů, předává se kopie hodnoty. |
sName | (String) Název volané funkce v DLL. |
nParDt | [nepovinné] (Long) Datový typ příslušného parametru volané funkce v DLL.
3 - Celé číslo (1 - 4 bajty), předává se kopie hodnoty.
4 - Reálné číslo 4 bajty, předává se kopie hodnoty.
5 - Reálné číslo 8 bajtů, předává se kopie hodnoty.
9 - Reference na PmBuffer objekt, představující binární data.
Předává se ukazatel na začátek vlastních binárních dat objektu PmBuffer. Pokud volaná funkce změní obsah binárních dat (vstupně/výstupní), pak se změní skutečně přímo v binárních datech v objektu PmBuffer. V syntaxi C se jedná o parametry označené znaky * nebo &. Realizují se tak vstupně/výstupní parametry, ukazatele na struktury, ale hlavně také ukazatele na textové řetězce jazyka C ukončené znakem NULL. To znamená, že pokud parametr nepředstavuje elementární číselnou hodnotu, pak se předává vždy jako samostatný PmBuffer. |
vParVal | [nepovinné] (Variant) Hodnota příslušného parametru volané funkce v DLL. |
var vVar = oDll.CallDll(nAttr, bRetDt, sName, nParDt, vParVal);
// C++ declaration of Win32 API function:
// int __stdcall GetUserNameW(char* psName, unsigned long* pnLength);
var oName = Pm.CreatePmBuffer();
// Musí být objekt PmBuffer, protože psName je textový řetězec
oName.SetSize(256 * 2);
var oLen = Pm.CreatePmBuffer();
// Musí být objekt PmBuffer, protože pnLength je reference (pointer)
oLen.SetInt32(-2, oName.GetSize()/2);
pMe.Pm("../AdvApi32").CallDll(0, 3, "GetUserNameW", 9, oName, 9, oLen);
var sName = oName.GetStringVar(0, 0, 2);
Pm.Debug("Dll:GetUserName=" + sName);