Dll RAPI probleme de convertion d'un code de VB

Programmation d'applications complexes
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ca va te sembler con, mais je pense que tu peux te passer de tout ce foutoir de conversion unicode vers ansi. PB peut utiliser nativement l'unicode!
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Message par GallyHC »

Bonjour Djes,

Je veux bien sur le fait de la compilation, mais si je ne met pas

searchhandle = CallFunction(#OPENLIB_0, "CeFindFirstFile", StrPtr(filereps), finddata)

avec pour le moment ce que j'ai compris

Procedure StrPtr(text.s)
;
Define *MemPtr.l
*MemPtr = AllocateMemory(Len(text))
PokeS(*MemPtr,text,Len(text),#PB_Unicode)
ProcedureReturn *MemPtr

EndProcedure

la dll Rapi me repond Faux et donc rien ne ce passe.

Cordialement,
GallyHC
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Normalement, si tu actives le support unicode dans les options, tu devrais pouvoir passer directement une chaine à la fonction; regarde l'aide sur callfunction et de là sur "prototype". Faudrait arriver à un truc comme ça :

Code : Tout sélectionner

Prototype.l CeFindFirstFile(lpFileName.p-unicode, lpFindFileData.CE_FIND_DATA)

If OpenLibrary(0, "rapi.dll")
   
  CeFindFirstFile.handle= GetFunction(0, "CeFindFirstFile")

  CeFindFirstFile(filereps, finddata)

EndIf   
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message par kernadec »

bonjour GallyHC
sinon essaye ce code?? je l'ai trouvé sur le forum anglais

Code : Tout sélectionner

;#####################################
; Auteur  ferblantier   forum english 
;#####################################
Structure PtrString
		StructureUnion
				*StrPtr.b
				String.s
		EndStructureUnion
EndStructure

Procedure.l AmendString(*str.b)
	Define.PtrString Result

	Result\StrPtr = *str
	strlen = Len(Result\String)
	For i=0 To strlen/2-1
		temp = PeekB(Result\StrPtr + i)
		PokeB(Result\StrPtr + i, PeekB(Result\StrPtr + strlen - 1 - i))
		PokeB(Result\StrPtr + strlen - 1 - i, temp)
	Next

	ProcedureReturn Result\StrPtr
EndProcedure

foo$ = "blah"
Debug foo$
Debug @foo$
Debug AmendString(@foo$)
Debug foo$
Debug @foo$
et 2 posts relatif a ton problème
http://translate.google.com/translate?j ... ry_state0=

http://translate.google.com/translate?j ... ry_state0=
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Message par GallyHC »

Encore merci a tous,

J'ai pas mal avance sur le code de la gestion de RAPI. Je vais faire un post avec le code complet actuel.

Voila le post http://www.purebasic.fr/french/viewtopi ... 9193#99193

Cordialement,
GallyHC
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message par kernadec »

bonjour GallyHC
je vois que tu as le moral c bien !
voila une conversion unicode
j'avais complètement oublié le codearchiv d' Andre

en même temps pour erix14 avec ce code le module couleur reste sans effet sur celui-ci??, alors que les autres codes du post sont converti en couleur.

cordialement

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2212&highlight=
; Author: dige
; Date: 06. October 2003
; OS: Windows
; Demo: No


; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Note: This code example is now for demonstration only,
;       because PB v4 supports Unicode now natively.
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

; Convert PB strings to Unicode strings...

; Wer für API Aufrufe Unicode Strings benötigt ( zum Bsp. für die NetAPI ) 
; kann diese mit folgendem Workaraound umwandeln: 

; PB-String To Unicode 
; by DiGe 09/2003 

Procedure StringToUnicode ( pbstrptr.l, ucstrptr.l )    ; ANSI Strings nach Unicode codieren 
  MultiByteToWideChar_ ( #CP_ACP, 0, pbstrptr, Len(PeekS(pbstrptr)), ucstrptr, Len(PeekS(ucstrptr)) ) 
  PokeL ( ucstrptr  + Len(PeekS(pbstrptr))*2, 0 ) 
EndProcedure 

; Anwendungsbeispiel: 

  UserName.s = "dige" 
  UserName_uc.s = Space ( 255 ) 

  StringToUnicode ( @UserName, @UserName_uc ) 
   

; Wichtig, PureBasic kann Unicode Strings nicht verabeiten, d.h. wenn 
; der Unicode-Text in der Variblen uc_txt.s ausgelesen oder weiter ver- 
; arbeitet werden soll, kann dies nur mit Peek und Poke über die Adresse 
; der Variablen @uc_txt geschehen. 
; Denn für die PureBasic String Routinen ist der String auf grund der 
; Nullbytes nur 1 Zeichen lang. 
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Cette fonction pourrait être bien meilleure :/
Répondre