Portabilité de mon .exe

general_simo Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 2 juin 2005 - 31 mai 2005 à 23:36
general_simo Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 2 juin 2005 - 2 juin 2005 à 09:06
Bonjour,


j'ai un probleme de portabilité de mon .exe
En faite je fais un simulateur de trafic telephonique.
lorsque je le lance sur mon pc tout marche bien, lorsque je le lance sur d'autres pc j'arrive a ouvrir le exe a configurer mon logiciel mais une fois je lance la simulation ( c'est des objects timer avec du code dedant) ca ne marche pas ( parfois message d'erreur type division par 0, parfois des timers qui ne se lancent pas donc pas d'affichage de resultat).
En essayant de compiler chez un ami j'ai reussit a faire marcher une partie et ceci en virant toutes les fonctions Val() et en remplacant les < par des <= !!!
est ce que qlq peut savoir d'ou peut venir ce pb et surtout comment y remedier et merci beaucoup d'avance...

8 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juin 2005 à 01:06
Normal, le contrôle timer n'est livré qu'avec le VB en
version complète!!! Donc, il faut livrer l'OCX avec ton script!!!
Regarde dans la MSDN (l'aide) de ton vrai VB pour voir quel fichier
c'est...



Pour tes problèmes de division par 0, à mon avis, c'est encore un des
trop nombreux bugs du VBA!!! Mais sans code, on ne peut pas avoir de
solutions toute faites pour toi... (surtout lorsque tu nous parles de
Val() puis ensuite de <= !!! je vois pas le rapport!!!)



Enjoy



(Si une réponse vous convient, cliquez sur le bouton qui suit...)
0
scortex84 Messages postés 379 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 20 avril 2011 1
1 juin 2005 à 10:53
Hello ! Encore plus simple, tu crée un setup ! Comme ça, tu ne te casses pas la tete à chercher tous les composants que tu utilises, VB le fait pour toi !

En VB6, je ne me souviens plus trop, je crois que cela s'appel 'Assistant déploiement et empaquetage". De mémoire, tu donnes le chemin d'accès des sources de ton appli, ou de l'exe je sais plus, et ensuite il te donne les dépendances et tu compiles un vrai setup comme les grands ;-)

En VB.Net, 100000 fois plus simple : à ta solution tu ajoutes un projet de déploiment. Tu ajoutes les sorties de ton projet principal au projet de déploiement. Tu compiles et tu as ton setup !

Et là, ça marche ! (mais ça reglera pas ta division par 0, ça c'est un bug !)

Seb.
0
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
2 juin 2005 à 03:52
salut

Personnellement , je fourre tous mes ocx et mes references dans un fichiers ressources , sans oublier les fichiers dll qui constitue le runtime de vb6 biensur

Au premier lancement du log su une nouvelle machine , j'extrait les ressources et je les enregistre sur le systeme avec regsrv32

puis j'inscrit dans le registre une clé test qui controle si l'application a dejas ete lance sur le pc !!!

et vraiment jamais de probleme d'ocx et de dll

c l'ideal
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
2 juin 2005 à 04:18
Dit, t'a pas une source à montrer là... Parce que ta
méthode, cetres, même si elle est, à mon sens, plus chiante à coder que
de simplement faire appel à l'assistant VB (empaquetage et dep...)...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
2 juin 2005 à 05:45
Voilla comment je fais pour chacune de mes application ! j'ai jamais eu de probleme ! contrairement a l'installeur de chez microsoft
il faut trois module ! dont deux des trois reservira plusieur fois dans l'application :

c un exemple que j'ai extrait de ma derniere aplication client/serveur :

si vous comprenez pas tout , [mailto:luckyluck55@hotmail.com luckyluck55@hotmail.com]

alors dans un module n°1: Module extrait_Zip

Sub ExtraitZIP(NomDeRessource As String, RepEtNomDuFichierDeDestination As String, TypeRes As String)
Dim sFile As String
Dim b() As Byte
Dim iFile As Integer


Resultat$ = RepEtNomDuFichierDeDestination
b = LoadResData(NomDeRessource, TypeRes)
On Error GoTo ErreurZip
iFile = FreeFile
Open Resultat$ For Binary Access Write Lock Read As #iFile
Put #iFile, , b
Close #iFile
iFile = 0
ErreurZip:
Close #iFile
End Sub

Dans module n°2: Module registre

Public Const SZ = "REG_SZ"
Public Const BINARY = "REG_BINARY"
Public Const DWORD = "REG_DWORD"


Public Function Reg_Ecrit(Clé As String, Valeur As String, typeclé As String) As Variant
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite Clé, Valeur, typeclé
End Function

Public Function Reg_Lire(Clé As String) As Variant
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
Reg_Lire = WshShell.RegRead(Clé)
End Function


Public Function Reg_Delete(Clé As String) As Boolean
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.regdelete Clé
End Function

Module n°3 : Module dossiers_speciaux

Option Explicit
Public Declare Function ShellExecuteA Lib "shell32" (ByVal hwnd As Long, ByVal lpFile As String, ByVal PathFile As String, ByVal Other As String, ByVal Other2 As String, ByVal Param As Long) As Long
' Déclaration des Api
Public Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hWndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
'pour les fichier temporaire
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long


' Enumération des dossiers spéciaux
Public Enum SpecialFoldersConstants

CSIDL_DESKTOP = &H0
CSIDL_INTERNET = &H1
CSIDL_PROGRAMS = &H2
CSIDL_CONTROLS = &H3
CSIDL_PRINTERS = &H4
CSIDL_PERSONAL = &H5
CSIDL_FAVORITES = &H6
CSIDL_STARTUP = &H7
CSIDL_RECENT = &H8
CSIDL_SENDTO = &H9
CSIDL_DESKTOPDIRECTORY = &H10
CSIDL_DRIVES = &H11
CSIDL_NETWORK = &H12
CSIDL_NETHOOD = &H13
CSIDL_FONTS = &H14
CSIDL_TEMPLATES = &H15
CSIDL_SHELLNEW = &H15
CSIDL_COMMON_STARTMENU = &H16
CSIDL_COMMON_PROGRAMS = &H17
CSIDL_COMMON_STARTUP = &H18
CSIDL_COMMON_DESKTOPDIRECTORY = &H19
CSIDL_INTERNET_CACHE = &H20
CSIDL_COOKIES = &H21
CSIDL_HISTORY = &H22
CSIDL_COMMON_APPDATA = &H23
CSIDL_WINDOWS = &H24
CSIDL_SYSTEM = &H25
CSIDL_PROGRAM_FILES = &H26
CSIDL_MYPICTURES = &H27
CSIDL_PROFILE = &H28
CSIDL_SYSTEMX86 = &H29
CSIDL_ADMINTOOLS = &H30


CSIDL_BITBUCKET = &HA
CSIDL_STARTMENU = &HB

CSIDL_APPDATA = &H1A
CSIDL_PRINTHOOD = &H1B
CSIDL_LOCAL_APPDATA = &H1C
CSIDL_ALTSTARTUP = &H1D
CSIDL_COMMON_ALTSTARTUP = &H1E
CSIDL_COMMON_FAVORITES = &H1F


CSIDL_PROGRAM_FILESX86 = &H2A
CSIDL_PROGRAM_FILES_COMMON = &H2B
CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
CSIDL_COMMON_TEMPLATES = &H2D
CSIDL_COMMON_DOCUMENTS = &H2E
CSIDL_COMMON_ADMINTOOLS = &H2F


CSIDL_FLAG_CREATE = &H8000
CSIDL_FLAG_DONT_VERIFY = &H4000
CSIDL_FLAG_MASK = &HFF00

CSIDL_MY_MUSIQUE = &HD
CSIDL_MY_VIDEO = &HE
CSIDL_BURNING = &H3B
End Enum


' Type
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type


' Constantes
Public Const MAX_PATH = 260


Public Function GetSpecialFolder(SpecialFolder As SpecialFoldersConstants) As String


' Les variables
Dim rc As Long
Dim IDL As ITEMIDLIST
Dim sPath As String


' Récupère le dossier spécial
rc = SHGetSpecialFolderLocation(100, SpecialFolder, IDL)
If rc = 0 Then
' Crée un tampon
sPath = Space$(MAX_PATH)
' Récupère le path à partir de l'IDList
SHGetPathFromIDList ByVal IDL.mkid.cb, ByVal sPath
' Supprime les chr$(0) inutiles
sPath = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
If Right$(sPath, 1) <> "" Then sPath = sPath & ""
Else
sPath = ""
End If
GetSpecialFolder = sPath
End Function


'fonction pour les fichier temporaires
Public Function GetTemporyFolderPath() As String


Dim sBuffer As String
Dim RV As Long


sBuffer = String(MAX_PATH, Chr(0))
RV = GetTempPath(MAX_PATH, sBuffer)
GetTemporyFolderPath = Left(sBuffer, RV)


End Function

Voila fin des modules :

Cote forme :
Private Sub Form_Initialize()
Dim rc
Dim RepWinSys32 As String


'obligatoire au cas ou un ocx ou dll est dejas sur le pc pour evite les erreur de copy
On Error Resume Next


'reperage du repertoire systeme de windows
RepWinSys32 = GetSpecialFolder(CSIDL_SYSTEM)


'verifie la valeur de la clé , si l'application n'a jamais ete lance , la valeur est ""
rc = Reg_Lire("HKEY_LOCAL_MACHINE\SOFTWARE\Pc_exclave\install")


'si le retour est different de 1
If rc <> 1 Then


'ici je procede a l'extration des fichier dll et des ocx , ils faut tous les extraires :
ExtraitZIP "COMCTL32.OCX", RepWinSys32 & "COMCTL32.OCX", "CUSTOM"

'vous les declarez tous via la commande si dessous ,
Shell RepWinSys32 & "regsvr32 /s " & "COMCTL32.OCX"


'vous inscrivez dans le registre la valeur 1 indiquant que l'application a dejas ete lance
Reg_Ecrit "HKEY_LOCAL_MACHINE\SOFTWARE\Pc_exclave\install", "1", SZ
End If
End Sub
0
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
2 juin 2005 à 05:57
je l'ai mis en sources
0
general_simo Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 2 juin 2005
2 juin 2005 à 08:59
En faite ce que j'ai essayé de faire c'est de compiler sur le pc d'un ami, les fonction Val() metter certain valeur a zero et donc j'avais de division par zero.
j'ai virée toutes les fonctions val() et ca marche mnt , c'est portable !!!!!
mais j'ai rien comprit !!!!! quelqu'un a une explication ???
merci
0
general_simo Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 2 juin 2005
2 juin 2005 à 09:06
En faite moi je fais un affichage de mes résultats dans des zone texte puis j' utilise a nouveau ces valeurs numeriques en utilisant la fonction Val().
et sur mon PC ca marche alors que sur les autres Val() met certaines valeures a zéro.
j'ai enlever tous les val lorsque j'ai compilé sur le pc d'un ami et ca marche, et c'est portable !!!!!!!!!!!!!!
0
Rejoignez-nous