PureBasic

Forums PureBasic
Nous sommes le Dim 26/Mai/2013 9:21

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 20 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 16:18 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Bonjour tout le monde,

Ne sachant pas vraiment si cela est possible ou pas, je me permets de vous posez la question. Dans une source que l’on doit compilé, serait’ il possible de mettre une partie du code en Unicode est pas le reste.

En gros pour faire un exemple simple pour le faire comprendre :

Code:
Unicode
retour = PathFileExists_("E:\mon_fichier.lib")
EndUnicode

En gros un truc comme ça. Alors je penses que cette question est un peu pour Fred, mais vous pouvez donné votre avis 

Cordialement,
GallyHC


Dernière édition par GallyHC le Dim 24/Oct/2010 16:22, édité 1 fois.

Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie d'une source PB
MessagePosté: Dim 24/Oct/2010 16:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
la question qui me viens tout de suite a l'esprit est :

mais pour quoi faire ? 8O
quel en serai l'intérêt ?

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 16:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
La reponse est plutot simple :). La RAPI.DLL est en unicode par contre quand j’utilise la Bibliothèque "Network" avec l’unicode activer cela renvois des informations incorrecte.

Et pour certaine autre partie du code cela me pose d'autres problèmes.

Cordialement,
GallyHC


Dernière édition par GallyHC le Dim 24/Oct/2010 16:28, édité 1 fois.

Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 16:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
tu as essayé de laisser en mode non unicode ?

ça plante ?

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 16:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Oui la partie RAPI plante "accès invalide en mémoire" ect... sans activer l'Unicode, ma question est justement pour cela. La j’avoue que je ne sais pas comment résoudre mon problème, pourtant je recherche des solutions.

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 16:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
je ne connais pas Rapi.dll

mais lui envoie tu une chaines ?
ou retourne t'elle une chaine ?

tu utilise les prototypes ?

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 16:51 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
En fait RAPI sert à la connexion entre un PC et un PocketPC. Donc je peux lui donnée des valeurs num, des string, des structure, ect… et RAPI la même chose.

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 19:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
je t'ai demandé si tu utilisai les prototypes pour faire l'appel de tes fonctions de la DLL ..

parceque depuis la version 4.50 c'est quasi obligatoire
sinon tu aura le type d'erreur que tu indique ;)

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 19:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Voila en gros le code et non je n'utilise pas les propotypes je vais devoir tout refaire lol sa va me prendre du temps alors :)

Code:
; +======================================================+
; |   GESTION DE RAPI.DLL (Réalisation par KoakDesign)   |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2008, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.40 (MODULE)               |
; +--------------+---------------------------------------+
; | VER & REV    | 3.0.0 RC0                             |
; +--------------+---------------------------------------+
; | Program name | ops_windows_activesync.pbi            |
; +======================================================+

; +======================================================+
; | Original Version: 3.0.0 RC0                          |
; +--------------+---------------------------------------+
; | Created by   | XXXXXXXXXXXXXXXXXX                    |
; | Graphix by   |                                       |
; +--------------+---------------------------------------+
; | Comments:    |                                       |
; +--------------+                                       |
; |                                                      |
; |                                                      |
; |                                                      |
; +======================================================+

; +======================================================+
; | Système d'Exploitation                               |
; +--------------+---------------------------------------+
; | Window       | Oui                                   |
; | Linux        | Non                                   |
; | MacOS        | Non                                   |
; +======================================================+

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES PROCEDURES.

Declare.b RAPIConnect()
Declare.b RAPIClose()
Declare.s RAPIGetCEOSVersionString()
Declare.b RAPIIsConnected()
Declare.i RAPIGDesktopDeviceCaps(lindex.l)
Declare.s RAPIErrorInformation()
Declare.s RAPIFindStorage()
Declare.b RAPIGetListFiles(filereps.s, sortname.b=#False)
Declare.l RAPIGetFileCount()
Declare.b RAPIGetFileInfo(lindex.l, *FileInfo)
Declare.l RAPIOpenFile(filename.s, mode.i, createnew.b, flags.l)
Declare.b RAPICopyCEFileToPC(CESourceFile.s, PCDestFile.s)
Declare.b RAPICopyPCFileToCE(PCSourceFile.s, CEDestFile.s)
Declare.b RAPIFileExists(CESourceFile.s)
Declare.b RAPICreateDirectory(filename.s)
Declare.b RAPIDeleteFile(filename.s)
Declare.b RAPIRenameFile(filename.s,newname.s)
Declare.b RAPIExecOnDevice(fileexec.s, command.s)
Declare.l RAPIMemorySpace(lindex.l)
Declare.l RAPIStorageSpace(lindex.l)
Declare.i RAPIPowerStatus()

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES STRUCTURES.

;{ - STRUCTURE
Structure RAPIINIT
  cbSize.l
  heRapiInit.l
  hrRapiInit.l
EndStructure
Structure CEOSVERSIONINFO
  dwOSVersionInfoSize.l
  dwMajorVersion.l
  dwMinorVersion.l
  dwBuildNumber.l
  dwPlatformId.l
  szCSDVersion.s{128}
EndStructure
Structure CE_FIND_DATA
  dwFileAttributes.l
  ftCreationTime.FILETIME
  ftLastAccessTime.FILETIME
  ftLastWriteTime.FILETIME
  nFileSizeHigh.l
  nFileSizeLow.l
  dwOID.l
  cFileName.s{256}
EndStructure
Structure STORE_INFORMATION
  dwStoreSize.l
  dwFreeSize.l
EndStructure
Structure SYSTEM_POWER_STATUS_EX
  ACLineStatus.b
  BatteryFlag.b
  BatteryLifePercent.b
  Reserved1.b
  BatteryLifeTime.d
  BatteryFullLifeTime.d
  Reserved2.b
  BackupBatteryFlag.b
  BackupBatteryLifePercent.b
  Reserved3.b
  BackupBatteryLifeTime.d
  BackupBatteryFullLifeTime.d
EndStructure
Structure SYSTEM_COPY_FILE
    value.i
EndStructure
;}
;{ - GLOBAL
Global PureRAPI_GetFileCount.l
Global Dim PureRAPI_GetFileList.CE_FIND_DATA(0)
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES.

;{ - ALL CERAPI API.
#OPENLIB_0                  = 1
#INVALID_HANDLE_VALUE       = -1
#TIME_WAIT_READ             = $1
#ONE_SECOND                 = $3E8
#GENERIC_READ               = $80000000
#GENERIC_WRITE              = $40000000
#CREATE_NEW                 = $1
#OPEN_EXISTING              = $3
;}
;{ - ALL CERAPI API.
#ERROR_SUCCESS              = $0
#ERROR_FILE_NOT_FOUND       = $2
#ERROR_PATH_NOT_FOUND       = $3
#ERROR_ACCESS_DENIED        = $5
#ERROR_INVALID_HANDLE       = $6
#ERROR_WRITE_PROTECT        = $13
#ERROR_FILE_EXISTS          = $50
#ERROR_INVALID_PARAMETER    = $57
#ERROR_DISK_FULL            = $70
#ERROR_INVALID_NAME         = $7B
;}
;{ - CeCreateFile.
#FILE_ATTRIBUTE_READONLY    = $1
#FILE_ATTRIBUTE_HIDDEN      = $2
#FILE_ATTRIBUTE_SYSTEM      = $4
#FILE_ATTRIBUTE_DIRECTORY   = $10
#FILE_ATTRIBUTE_SPECIAL     = $14
#FILE_ATTRIBUTE_ARCHIVE     = $20
#FILE_ATTRIBUTE_NORMAL      = $80
#FILE_ATTRIBUTE_TEMPORARY   = $100
#FILE_ATTRIBUTE_STORAGE     = $110
#FILE_ATTRIBUTE_COMPRESSED  = $800
;}
;{ - CeGetDesktopDeviceCaps.
#DRIVERVERSION              = $0
#TECHNOLOGY                 = $2
#HORZSIZE                   = $4
#VERTSIZE                   = $6
#HORZRES                    = $8
#VERTRES                    = $A
#BITSPIXEL                  = $C
#PLANES                     = $E
#NUMBRUSHES                 = $10
#NUMPENS                    = $12
#NUMMARKERS                 = $14
#NUMFONTS                   = $16
#NUMCOLORS                  = $18
#PDEVICESIZE                = $1A
#CURVECAPS                  = $1C
#LINECAPS                   = $1E
#POLYGONALCAPS              = $20
#TEXTCAPS                   = $22
#CLIPCAPS                   = $24
#RASTERCAPS                 = $26
#ASPECTX                    = $28
#ASPECTY                    = $2A
#ASPECTXY                   = $2C
#PHYSICALWIDTH              = $6E
#PHYSICALHEIGHT             = $6F
#PHYSICALOFFSETX            = $70
#PHYSICALOFFSETY            = $71
#SHADEBLENDCAPS             = $78
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b RAPIConnect()
; INITIALISATION DE LA CONNEXION (RAPI.DLL).
  Define Hr.l
  Define dwTimeout.l
  Define dwWaitRet.l
  Define pRapiInit.RAPIINIT

  If OpenLibrary(#OPENLIB_0, "rapi.dll")
    dwTimeout = #TIME_WAIT_READ * #ONE_SECOND
    pRapiInit\cbSize = SizeOf(pRapiInit)
    pRapiInit\heRapiInit = 0
    pRapiInit\hrRapiInit = 0
    Hr = CallFunction(#OPENLIB_0, "CeRapiInitEx", @pRapiInit)
    If Hr <> #INVALID_HANDLE_VALUE
      dwWaitRet = WaitForSingleObject_(pRapiInit\heRapiInit, dwTimeout)
      If dwWaitRet = 0
        If pRapiInit\hrRapiInit >= 0
          ProcedureReturn #True
        Else
          Goto RAPIClose
        EndIf
      Else
        Goto RAPIClose
      EndIf
    Else
      Goto RAPIClose
    EndIf
  Else
    RAPIErrorInformation()
    ProcedureReturn #False
  EndIf
RAPIClose:
  If Hr >= 0
    RAPIErrorInformation()
    CallFunction(#OPENLIB_0, "CeRapiUninit")
    CloseLibrary(#OPENLIB_0)
  EndIf
  ProcedureReturn #False

EndProcedure

Procedure.b RAPIClose()
; FERMETURE DE LA CONNEXION (RAPI.DLL).
  CallFunction(#OPENLIB_0, "CeRapiUninit")
  CloseLibrary(#OPENLIB_0)

EndProcedure

Procedure.s RAPIGetCEOSVersionString()
; DONNE LA VERSION DU POCKET-PC.
  Define ceosver.CEOSVERSIONINFO

  ceosver\dwOSVersionInfoSize = SizeOf(ceosver)
  If CallFunction(#OPENLIB_0, "CeGetVersionEx", @ceosver)
    ProcedureReturn Str(ceosver\dwMajorVersion) + "." + Str(ceosver\dwMinorVersion) + "." + Str(ceosver\dwBuildNumber) + " " + ceosver\szCSDVersion
  EndIf

EndProcedure

Procedure.b RAPIIsConnected()
; VERIFICATION DE LA CONNEXION.
  If RapiGetCEOSVersionString() <> ""
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.i RAPIGDesktopDeviceCaps(lindex.l)
; ROUTINE DE SUPPRESSION D'UN FICHIER.
  ProcedureReturn CallFunction(#OPENLIB_0, "CeGetDesktopDeviceCaps", lindex)

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.s RAPIErrorInformation()
; ROUTINE DE GESTION DES ERREURS.
  Define lceerror.l
  Define sceerror.s

  lceerror = CallFunction(#OPENLIB_0, "CeGetLastError")
  Select lceerror
    Case #ERROR_FILE_NOT_FOUND:     sceerror = "Erreur: Ce fichier n'existe pas..."
    Case #ERROR_PATH_NOT_FOUND:     sceerror = "Erreur: Ce répertoire n'existe pas..."
    Case #ERROR_INVALID_HANDLE:     sceerror = "Erreur: Aucun handle valide..."
    Case #ERROR_ACCESS_DENIED:      sceerror = "Erreur: Accès interdit..."
    Case #ERROR_WRITE_PROTECT:      sceerror = "Erreur: La mémoire est protégée en écriture."
    Case #ERROR_FILE_EXISTS:        sceerror = "Erreur: Le fichier est présent sur le périphérique."
    Case #ERROR_INVALID_PARAMETER:  sceerror = "Erreur: Les paramètres sont invalides..."
    Case #ERROR_DISK_FULL:          sceerror = "Erreur: Le disque est plein..."
    Case #ERROR_INVALID_NAME:       sceerror = "Erreur: Le nom est invalide..."
  EndSelect
  If sCeError <> ""
    MessageRequester("RAPI.DLL Error Report:", sceerror, #PB_MessageRequester_Ok)
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.s RAPIFindStorage()
; ROUTINE DE RECHERCHE D'UNE CARTE SD.
  Define searchhandle.l
  Define findreturn.l
  Define result.s
  Define storage.s
  Define filereps.s
  Protected finddata.CE_FIND_DATA

  filereps = "\*"
  searchhandle = CallFunction(#OPENLIB_0, "CeFindFirstFile", @filereps, finddata)
  If searchhandle <> #INVALID_HANDLE_VALUE
    Repeat
      result = finddata\cFileName
      If finddata\dwFileAttributes = #FILE_ATTRIBUTE_STORAGE And LCase(result) <> "storage" And LCase(result) <> "bluetooth"
        storage = "\" + result + "\"
        Goto RAPIEnd
      EndIf
      findreturn = CallFunction(#OPENLIB_0, "CeFindNextFile", searchhandle, finddata)
    Until findreturn = 0
  EndIf
  RAPIEnd:
  ProcedureReturn storage

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b RAPIGetListFiles(filereps.s, sortname.b=#False)
; ROUTINE DE LISTAGE D'UN REPERTOIRE.
  Define i.l
  Define searchhandle.l
  Define findreturn.l
  Define result.s
  Protected finddata.CE_FIND_DATA

  If Right(filereps,1) <> "*"
    filereps = filereps + "*"
  EndIf
  searchhandle = CallFunction(#OPENLIB_0, "CeFindFirstFile", @filereps, finddata)
  If searchhandle <> #INVALID_HANDLE_VALUE
    PureRAPI_GetFileCount = 0
    ReDim PureRAPI_GetFileList(1)
    Repeat
      ReDim PureRAPI_GetFileList(i)
      PureRAPI_GetFileList(i)\cFileName                       = finddata\cFileName
      PureRAPI_GetFileList(i)\dwFileAttributes                = finddata\dwFileAttributes
      PureRAPI_GetFileList(i)\ftCreationTime\dwLowDateTime    = finddata\ftCreationTime\dwLowDateTime
      PureRAPI_GetFileList(i)\ftCreationTime\dwHighDateTime   = finddata\ftCreationTime\dwHighDateTime
      PureRAPI_GetFileList(i)\ftLastAccessTime\dwLowDateTime  = finddata\ftLastAccessTime\dwLowDateTime
      PureRAPI_GetFileList(i)\ftLastAccessTime\dwHighDateTime = finddata\ftLastAccessTime\dwHighDateTime
      PureRAPI_GetFileList(i)\ftLastWriteTime\dwLowDateTime   = finddata\ftLastWriteTime\dwLowDateTime
      PureRAPI_GetFileList(i)\ftLastWriteTime\dwHighDateTime  = finddata\ftLastWriteTime\dwHighDateTime
      PureRAPI_GetFileList(i)\nFileSizeHigh                   = finddata\nFileSizeHigh
      PureRAPI_GetFileList(i)\nFileSizeLow                    = finddata\nFileSizeLow
      PureRAPI_GetFileList(i)\dwOID                           = finddata\dwOID
      findreturn = CallFunction(#OPENLIB_0, "CeFindNextFile", searchhandle, finddata)
      i+1
    Until findreturn = #ERROR_SUCCESS
    If sortname = #True
      SortStructuredArray(PureRAPI_GetFileList(), #PB_Sort_Ascending | #PB_Sort_NoCase, SizeOf(CE_FIND_DATA\cFileName), #PB_Sort_String)
    EndIf
    PureRAPI_GetFileCount = i - 1
    ProcedureReturn #True
  EndIf
  PureRAPI_GetFileCount = 0
  ProcedureReturn #False

EndProcedure

Procedure.l RAPIGetFileCount()
; DONNE LE NOMBRE DE FICHIER.
  ProcedureReturn PureRAPI_GetFileCount

EndProcedure

Procedure.b RAPIGetFileInfo(lindex.l, *FileInfo)
; ENVOIS LES INFORMATIONS DU FICHIER.
  If lindex => 0 And lindex <= PureRAPI_GetFileCount
    CopyMemory(@PureRAPI_GetFileList(lindex), *FileInfo, SizeOf(CE_FIND_DATA))
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l RAPIOpenFile(filename.s, mode.i, createnew.b, flags.l)
; ROUTINE D'OUVERTURE D'UN FICHIER.
  Define lfilemode.l
  Define createdist.l
  Protected security.SECURITY_ATTRIBUTES

  Select mode
    Case 1: lfilemode = #GENERIC_READ
    Case 2: lfilemode = #GENERIC_WRITE
    Case 3: lfilemode = #GENERIC_READ Or #GENERIC_WRITE
  EndSelect
  If createnew = #True
    createdist = #CREATE_NEW
  Else
    createdist = #OPEN_EXISTING
  EndIf
  ProcedureReturn CallFunction(#OPENLIB_0, "CeCreateFile", @filename, lfilemode, 0, security, createdist, flags, 0)

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b RAPICopyCEFileToPC(CESourceFile.s, PCDestFile.s)
; ROUTINE DE COPIE DU FICHIER POCKET->PC.
  Define i.i
  Define lresult.l
  Define sresult.s
  Define lbufferlen.l = 2048
  Define lbytesread.l
  Define lcefilehandle.l
  Dim bfile.b(lbufferlen)

  lcefilehandle = RAPIOpenFile(CESourceFile, 1, #False, #FILE_ATTRIBUTE_NORMAL)
  If lcefilehandle <> #INVALID_HANDLE_VALUE
    If CreateFile(0, PCDestFile)
      Repeat
        lresult = CallFunction(#OPENLIB_0, "CeReadFile", lcefilehandle, @bfile(0), lbufferlen, @lbytesread, 0)
        If lresult And lbytesread > 0
          sresult = ""
          For i=0 To lbytesread - 1
            WriteByte(0, bfile(i))
          Next i
        EndIf
      Until lresult And lbytesread = 0
      CloseFile(0)
    EndIf
    If RAPIErrorInformation() <> ""
    EndIf
    lResult = CallFunction(#OPENLIB_0, "CeCloseHandle", lCeFileHandle)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

Procedure.b RAPICopyPCFileToCE(PCSourceFile.s, CEDestFile.s)
; ROUTINE DE COPIE DU FICHIER PC->POCKET.
  Define i.l
  Define lfllen.l
  Define lresult.l
  Define lbitpos.l
  Define lbufferlen.l = 2048
  Define bendcopy.b  = #False
  Define lbyteswrite.l
  Define ltotalcopied.l
  Define lcefilehandle.l
  Dim bfile.SYSTEM_COPY_FILE(0)

  If ReadFile(0, PCSourceFile)
    lfllen = Lof(0)
    ReDim bfile(lfllen)
    ReadData(0,@bfile(),lfllen)
    CloseFile(0)
    If RAPIFileExists(CEDestFile)
      If RAPIDeleteFile(CEDestFile) = #False
        ProcedureReturn #False
      EndIf
    EndIf
    lcefilehandle = RAPIOpenFile(CEDestFile, 2, #True, #FILE_ATTRIBUTE_NORMAL)
    If lcefilehandle <> #INVALID_HANDLE_VALUE
      lbitpos = 0
      Repeat
        If lfllen - ltotalcopied > lbufferlen
          lresult = CallFunction(#OPENLIB_0, "CeWriteFile", lcefilehandle, @bfile(lbitpos), lbufferlen, @lbyteswrite, 0)
          ltotalcopied + lbyteswrite
          lbitpos + (lbufferlen/4)
        Else
          lbufferlen = lfllen - ltotalcopied
          If lbufferlen > 0
            lresult = CallFunction(#OPENLIB_0, "CeWriteFile", lcefilehandle, @bfile(lbitpos), lbufferlen, @lbyteswrite, 0)
          EndIf
          ltotalcopied + lbyteswrite
          bendcopy = #True
        EndIf
      Until bendcopy = #True
      lresult = CallFunction(#OPENLIB_0, "CeCloseHandle", lCeFileHandle)
      Debug RAPIErrorInformation()
    EndIf
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b RAPIFileExists(CESourceFile.s)
; ROUTINE DE VERIFICATION "FileExists".
  Define lresult.l
  Define lcefilehandle.l

  lcefilehandle = RAPIOpenFile(CESourceFile, 1, #False, #FILE_ATTRIBUTE_NORMAL)
  If lcefilehandle <> #INVALID_HANDLE_VALUE
    lresult = CallFunction(#OPENLIB_0, "CeCloseHandle", lcefilehandle)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

Procedure.b RAPICreateDirectory(filename.s)
; ROUTINE DE SUPPRESSION D'UN FICHIER.
  ProcedureReturn CallFunction(#OPENLIB_0, "CeCreateDirectory", @filename, 0)

EndProcedure

Procedure.b RAPIDeleteFile(filename.s)
; ROUTINE DE SUPPRESSION D'UN FICHIER.
  If RAPIFileExists(filename)
    ProcedureReturn CallFunction(#OPENLIB_0, "CeDeleteFile", @filename)
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

Procedure.b RAPIRenameFile(filename.s,newname.s)
; ROUTINE DE RENOMMAGE D'UN FICHIER.
  If RAPIFileExists(newname)
    RAPIDeleteFile(newname)
  EndIf
  If CallFunction(#OPENLIB_0, "CeMoveFile", @filename, @newname)
    RAPIErrorInformation()
    ProcedureReturn #False
  Else
    ProcedureReturn #True
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.b RAPIExecOnDevice(fileexec.s, command.s)
; ROUTINE D'EXECUTION D'UN PROGRAMME.
  Protected newprocinfo.PROCESS_INFORMATION

  If CallFunction(#OPENLIB_0, "CeCreateProcess", @fileexec, @command, 0, 0, 0, 0, 0, 0, 0, newProcInfo) = 0
    ProcedureReturn #False
  Else
    ProcedureReturn #True
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l RAPIMemorySpace(lindex.l)
; ROUTINE DE VERIFICATION DE LA MEMOIRE.
  Define lresult.l

  Protected sMemoryMem.MEMORYSTATUS 
  lresult = CallFunction(#OPENLIB_0, "CeGlobalMemoryStatus",sMemoryMem)
  Select lindex
    Case 0:       ProcedureReturn sMemoryMem\dwTotalPhys
    Case 1:       ProcedureReturn sMemoryMem\dwTotalPhys - sMemoryMem\dwAvailPhys
  EndSelect
  ProcedureReturn 0

EndProcedure

Procedure.l RAPIStorageSpace(lindex.l)
; ROUTINE DE VERIFICATION DU STORAGE.
  Define lresult.l
  Protected sMemoryStr.STORE_INFORMATION

  lresult = CallFunction(#OPENLIB_0, "CeGetStoreInformation",sMemoryStr)
  Select lindex
    Case 0:       ProcedureReturn sMemoryStr\dwStoreSize
    Case 1:       ProcedureReturn sMemoryStr\dwFreeSize
  EndSelect
  ProcedureReturn 0

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.i RAPIPowerStatus()
; ROUTINE DE VERIFICATION DES BATTERIES.
  Protected pStatus.SYSTEM_POWER_STATUS_EX

  CallFunction(#OPENLIB_0, "CeGetSystemPowerStatusEx", @pStatus, #True)
  ProcedureReturn pStatus\BatteryLifePercent
 
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; EXEMPLE POUR LISTE LES FICHIERS DE LA RACINE (LA RACINE EST "\").
;Define i.l
;Define FileInfo.CE_FIND_DATA
;If RAPIConnect()
;  If RAPIIsConnected()
;    Debug "Résolution Ecran : " + Str(RAPIGDesktopDeviceCaps(#HORZRES)) + "x" + Str(RAPIGDesktopDeviceCaps(#VERTRES)) + "x" + Str(RAPIGDesktopDeviceCaps(#BITSPIXEL))
;    Debug "Répertoire Memoire : " + RAPIFindStorage()
;    Debug "Charge Batterie : " + Str(RAPIPowerStatus()) + "%"
;    RAPIGetListFiles("\", #True)
;    For i=0 To RAPIGetFileCount()
;      RAPIGetFileInfo(i, @FileInfo.CE_FIND_DATA)
;      If FileInfo\dwFileAttributes = #FILE_ATTRIBUTE_DIRECTORY Or FileInfo\dwFileAttributes = #FILE_ATTRIBUTE_STORAGE Or FileInfo\dwFileAttributes = #FILE_ATTRIBUTE_SPECIAL
;        Debug "Dir: " + FileInfo\cFileName
;      EndIf
;    Next i
;    For i=0 To RAPIGetFileCount()
;      RAPIGetFileInfo(i, @FileInfo.CE_FIND_DATA)
;      If FileInfo\dwFileAttributes <> #FILE_ATTRIBUTE_DIRECTORY And FileInfo\dwFileAttributes <> #FILE_ATTRIBUTE_STORAGE And FileInfo\dwFileAttributes <> #FILE_ATTRIBUTE_SPECIAL
;        Debug FileInfo\cFileName
;      EndIf
;    Next i
;  EndIf
;  RAPIClose()
;EndIf


Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 20:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
voici un exemple d'appel d'une dll en utilisant les prototypes

le code d'une DLL : (qui reste normal)

Citation:


; super DLL cree par Dobro
Global NomFichier$

ProcedureDLL.s open_file(titre$,path$,patern$) ; le nom de la fonction sera donc "open_file" et aura 3 parametres
        NomFichier$= openfilerequester (titre$,path$,patern$,1) ; appel de la fonction Purebasic
         ProcedureReturn NomFichier$ ; variable retournée
EndProcedure



et voici comment on appel la fonction en utilisant un prototype :

Citation:


Prototype.l appel_fonction (titre$,path$,filtre$) ; on creer une variable typé avec les parametres de la fonction qui se trouve dans la dll

If openlibrary (0, "dobro.dll" ) ; ouvre la dll
        appel_fonction.appel_fonction = getfunction (0, "open_file" ) ; transmet les parametres de la fonction open_file de la dll dans notre variable typée (genre de structure)
         ;et transmission a la variable appel_fontion
         Debug peeks (appel_fonction ( "ouvrir" , "c:\dobro\" , "*.txt" )) ; on appel la fonction en transmetttant les parametres
         ; a partir de notre variable typé (appel_fonction) puis on lit le retour de la fonction ....utilisation du peeks() obligatoire !
        
         closelibrary (0) ; on peut fermer la dll
EndIf



a toi de jouer :)

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Dim 24/Oct/2010 21:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Je vais surement y passe quelque heure mais bon sa servira surement a pas mal de personne et surtout, j'en ai besoin alors e moi de jouer lolll merci pour ton aide.

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Ven 29/Oct/2010 11:33 
Hors ligne
Site Admin

Inscription: Mer 21/Jan/2004 11:03
Messages: 1904
Les prototypes sont une des solutions. Mais si tu commences à gérer de l'unicode dans ton programme, compile le completement en unicode, car qui peut le plus peut le moins, donc tu dervais pas avoir de probleme à continuer à gerer de l'ascii.


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Ven 12/Nov/2010 0:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Bonjour,

Dobro> en lisant la doc j'ai l'impression que les prototypes sont bien la solution. Le seule problème c'est que je comprend pas le fonctionnement du code d'exemple de la doc. Pourais-tu me faire un exemple simple avec par exemple cette fonction?

Code:
Procedure.s RAPIGetCEOSVersionString()
; DONNE LA VERSION DU POCKET-PC.
  Define ceosver.CEOSVERSIONINFO

  ceosver\dwOSVersionInfoSize = SizeOf(ceosver)
  If CallFunction(#OPENLIB_0, "CeGetVersionEx", @ceosver)
    ProcedureReturn Str(ceosver\dwMajorVersion) + "." + Str(ceosver\dwMinorVersion) + "." + Str(ceosver\dwBuildNumber) + " " + ceosver\szCSDVersion
  EndIf

EndProcedure

Merci d'avance :)

Fred> merci pour ton message le problème est que si je met en full unicode, la fonction ReceiveNetworkData() me donne n'importe quoi, par exemple et d'autre aussi.

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Ven 12/Nov/2010 1:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12959
pourquoi réinventer la roue ? :lol:

Citation:


#My_OS_Windows_NT3 = 5
#My_OS_Windows_95 = 10
#My_OS_Windows_NT4 = 15
#My_OS_Windows_98 = 20
#My_OS_Windows_ME = 25
#My_OS_Windows_2000 = 30
#My_OS_Windows_XP = 35
#My_OS_Windows_Server_2003 = 40
#My_OS_Windows_Vista = 45
#My_OS_Windows_Server_2008 = 50
#My_OS_Windows_7 = 55
#My_OS_Windows_Future = 100

Procedure MyOSVersionVal()
         ;nco2k
         Protected Result, osvi.OSVERSIONINFO, osviex.OSVERSIONINFOEX
        
        osvi\dwOsVersionInfoSize = sizeof (OSVERSIONINFO)
         If GetVersionEx_ (@osvi)
                 Select osvi\dwPlatformId
                                
                         Case 1
                                
                                 If osvi\dwMajorVersion = 4
                                         Select osvi\dwMinorVersion
                                                 Case 0
                                                        Result = #My_OS_Windows_95
                                                 Case 10
                                                        Result = #My_OS_Windows_98
                                                 Case 90
                                                        Result = #My_OS_Windows_ME
                                         EndSelect
                                 EndIf
                                
                         Case 2
                                
                                osviex\dwOsVersionInfoSize = sizeof (OSVERSIONINFOEX)
                                 If GetVersionEx_ (@osviex)
                                         Select osviex\dwMajorVersion
                                                        
                                                 Case 3
                                                        Result = #My_OS_Windows_NT3
                                                 Case 4
                                                        Result = #My_OS_Windows_NT4
                                                 Case 5
                                                         Select osviex\dwMinorVersion
                                                                 Case 0
                                                                        Result = #My_OS_Windows_2000
                                                                 Case 1
                                                                        Result = #My_OS_Windows_XP
                                                                 Case 2
                                                                         If osviex\wProductType = 1
                                                                                Result = #My_OS_Windows_XP ; 64Bit
                                                                         Else
                                                                                Result = #My_OS_Windows_Server_2003
                                                                         EndIf
                                                         EndSelect
                                                 Case 6
                                                         Select osviex\dwMinorVersion
                                                                 Case 0
                                                                         If osviex\wProductType = 1
                                                                                Result = #My_OS_Windows_Vista
                                                                         Else
                                                                                Result = #My_OS_Windows_Server_2008
                                                                         EndIf
                                                                 Case 1
                                                                         If osviex\wProductType = 1
                                                                                Result = #My_OS_Windows_7
                                                                         Else
                                                                                Result = #My_OS_Windows_Server_2008 ; R2
                                                                         EndIf
                                                         EndSelect
                                                        
                                         EndSelect
                                 Else
                                        Result = -1
                                 EndIf
                                
                 EndSelect
         Else
                Result = -1
         EndIf
        
         Select Result
                 Case 0
                        Result = #My_OS_Windows_Future
                 Case -1
                        Result = 0 ; Error
         EndSelect
        
         ProcedureReturn Result
EndProcedure

Procedure.s MyOSVersionStr()
        
         Protected Result.s
        
         Select MyOSVersionVal()
                 Case #My_OS_Windows_NT3
                        Result = "Windows NT3"
                 Case #My_OS_Windows_95
                        Result = "Windows 95"
                 Case #My_OS_Windows_NT4
                        Result = "Windows NT4"
                 Case #My_OS_Windows_98
                        Result = "Windows 98"
                 Case #My_OS_Windows_ME
                        Result = "Windows ME"
                 Case #My_OS_Windows_2000
                        Result = "Windows 2000"
                 Case #My_OS_Windows_XP
                        Result = "Windows XP"
                 Case #My_OS_Windows_Server_2003
                        Result = "Windows Server 2003"
                 Case #My_OS_Windows_Vista
                        Result = "Windows Vista"
                 Case #My_OS_Windows_Server_2008
                        Result = "Windows Server 2008"
                 Case #My_OS_Windows_7
                        Result = "Windows 7"
                 Case #My_OS_Windows_Future
                        Result = "Windows Future"
         EndSelect
        
         ProcedureReturn Result
EndProcedure

messagerequester ( "My OS Version" , MyOSVersionStr())


_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Unicode pour une partie de source PB
MessagePosté: Ven 12/Nov/2010 3:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 08/Jan/2010 1:14
Messages: 810
Localisation: Québec, Canada
Y'a un Windows Future? :mrgreen:


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 20 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye