Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut à tous !
Savez-vous pourquoi, sur la version de pb10.5 ou 11, il faut declarer toutes les fonctions external sous cette forme ? ... alias for "ItnGetNodeCoordinates;Ansi"
il me semble, d'apres constatation, qu'on est pas obligé de le faire pour tous ... par exemple, si une fonction external ne comporte que des arguments de type integer...
par contre, j'ai remarqué, que c'etait obligatoire, lorsqu'il y a un argument de type string.
est-ce du à l'unicode ?
merci de m'eclaircir un peu plus d'avance...
Hors ligne
parceque ces versions de PB sont par défaut en Unicode.
Hors ligne
pick ouic a écrit:
est-ce du à l'unicode ?
Oui !
Je confirme ce que dis Rincevent.
";Ansi" sert à dire que la dll n'est pas unicode mais Ansi
On peut s'en passer en utilisant la version W d'une API à la place de la version A
Exemples :
Function Boolean SystemParametersInfo1 (uLong uiAction, uLong uiParam, REF String lpvParam & , uLong fWinIni) Library "user32.dll" Alias For "SystemParametersInfoA;Ansi" Function Boolean SystemParametersInfo2 (uLong uiAction, uLong uiParam, REF String lpvParam & , uLong fWinIni) Library "user32.dll" Alias For "SystemParametersInfoW"
Hors ligne
et ca ?
Function uInt SendMessageA (int Handle, long Command, long Mess, int anyp) Library "user32.dll"
tu l'as essayé ?
Hors ligne
Non, désolé.
En faits, j'avais un besoin impératif de SystemParametersInfo vu que là où je bosse c'est interdit de changer le fond d'écrans
Hors ligne
en fait, je fais une migration d'une appli de pb7 à pb11.
tout en cochant l'option qui permet de redeclarer automatiquement les fonctions external.
voila ce que j'ai :
// Window functions Function ulong GetWindowTextA(ulong handle, ref string wintext, ulong length) Library "USER32.DLL" alias for "GetWindowTextA;Ansi" Function ulong GetWindowsDirectoryA (ref string dirtext, ulong textlen) library "KERNEL32.DLL" alias for "GetWindowsDirectoryA;Ansi" Function ulong GetSystemDirectoryA (ref string dirtext, ulong textlen) library "KERNEL32.DLL" alias for "GetSystemDirectoryA;Ansi" Function ulong FindWindowA( ref string lpClassName, ref string lpWindowName) Library "USER32.DLL" alias for "FindWindowA;Ansi" // User/computer information function boolean GetUserNameA(ref string lpBuffer, ref ulong nSize) library "ADVAPI32.DLL" alias for "GetUserNameA;Ansi" function boolean GetComputerNameA(ref string lpBuffer, ref ulong nSize) library "KERNEL32.DLL" alias for "GetComputerNameA;Ansi" // Get text size Function boolean SystemParametersInfoA(uint wActon, uint wParam, REF int pvParam, uint fUpdateProfile) Library "USER32.DLL" Function ulong GetDC(ulong hWnd) Library "USER32.DLL" Function long ReleaseDC(ulong hWnd, ulong hdcr) Library "USER32.DLL" Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL" alias for "GetTextExtentPoint32A;Ansi" Function ulong SelectObject(ulong hdc, ulong hWnd) Library "GDI32.DLL"
comme tu peux le voir, il ne le fait pas pour toutes les fonctions externals.
donc, je cherche la raison du pourquoi ?
Hors ligne
pick ouic a écrit:
...
comme tu peux le voir, il ne le fait pas pour toutes les fonctions externals.
donc, je cherche la raison du pourquoi ?
Mais tu avais déjà trouvé :
pick ouic a écrit:
j'ai remarqué, que c'etait obligatoire, lorsqu'il y a un argument de type string
Puisque cette histoire d'Unicode ne concerne que les Strings
Hors ligne