general_simo
Messages postés3Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 2 juin 2005
-
31 mai 2005 à 23:36
general_simo
Messages postés3Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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...
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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...)
scortex84
Messages postés379Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention20 avril 20111 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 !)
yohan49
Messages postés380Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention13 août 20117 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 !!!
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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...)...
Vous n’avez pas trouvé la réponse que vous recherchez ?
yohan49
Messages postés380Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention13 août 20117 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
' 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
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
general_simo
Messages postés3Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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
general_simo
Messages postés3Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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 !!!!!!!!!!!!!!