gregorian
Messages postés57Date d'inscriptionlundi 18 avril 2005StatutMembreDernière intervention24 mars 2011
-
5 déc. 2006 à 16:55
Mike Gagnon
Messages postés381Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention24 octobre 2013
-
6 déc. 2006 à 21:35
Bonjour à tous,
Je dois coer une apppli qui fait appel en grande partie à une DLL extérieure et n'ayant jamais travaillé de cette manière, je me retrouve légerement coincé.
la dll est est la suivante: C:\windows\system32\WinBooksOfficeApi.dll et elle est correctement enregistrée.
il se trouve dedans une fonction Init() qui renvoie un integer. J'ai vérifier l'ortho et les maj en passant par l'object browser
Dans mon code, je fais la chose suivante:
DECLARE integer Init IN C:\windows\system32\WinBooksOfficeApi.dll
IF Init() <> 0
MESSAGEBOX("erreur init")
ENDIF
mais il me lance une erreur sur la ligne IF Init() <> 0
qui est: cannot find entry point Init in the DLL
Alors que cette fonction existe bien dans la DLL.
Que se passe t'il ?
Mike Gagnon
Messages postés381Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention24 octobre 20132 5 déc. 2006 à 17:31
Plusieurs questions se posent.
1.Est-ce un DLL créer en C (ou C++) ou ta declaration serait possiblement bonne. Ou un DLL créer en Foxpro ou ta déclaration n'est pas bonne.
2. Normallement on ne fait pas appel à l'init d'un DLL mais à un autre fonction à l'intérieur du DLL.
3. IF Init() <> 0
MESSAGEBOX("erreur init")
ENDIF
Que t,attendais a voir ici?
Normallement un appel à un DLL est comme ceci.
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds
= Sleep (20)
Je ne vois pas ou tu envoye un INTEGER à ton DLL.
gregorian
Messages postés57Date d'inscriptionlundi 18 avril 2005StatutMembreDernière intervention24 mars 20111 6 déc. 2006 à 15:11
Bonjour,
la dll a été écrite en VB6 ou en C++
Le integer que j'ai indiqué, je l'ai mis car je croyais qu'il fallait également préciser le type de la valeur de retour.
Maintenant, cet appel touche bien une fonction de la dll qui possède une fonction qui s'appelle init.
Toi tu m'écris que pour déclarer une DLL, il faut faire comme ceci:
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds = Sleep (20)
Ca veut dire que lors de la déclaration de la fonction tu lui passe déjà les paramètres?
Coment fais tu dans le cas ou tu as besoin d'information entrée par l'utilisateur ?
Tu déclares ta fonction DLL au moment où tu l'utilises ?
gregorian
Messages postés57Date d'inscriptionlundi 18 avril 2005StatutMembreDernière intervention24 mars 20111 6 déc. 2006 à 16:21
Re,
Dans le même ordre d'idée, cette DLL comprend plusieurs classes qui ont chacune des propriétés bien distinctes. Comment puis je modifier ces propriétés? Existe t'il un moyen de "déclarer" ces propriétés? Ou via fox pro ce genre d'opération n'est pas possible.
Merci de votre aide.
Greg
Dans le cas ou ca peut aider, voici un exemple de code mais fait en VB qui fait appel à cette DLL.
Dim Wb As New WinbooksObject
Private Sub Form_Unload(Cancel As Integer)
Wb.CloseDossier
End Sub
Private Sub Import_Click()
'Initialisation
Dim i As
Integer
If Wb.Init
<> 0 Then MsgBox Wb.LastErrorMessage: Exit Sub
'Login
utilisateur
If
Wb.Login("SYSTEM", "") <> 0 Then MsgBox
Wb.LastErrorMessage: Exit Sub
'Ouverture du dossier Parfilux, le dossier de test
If
Wb.OpenDossier("PARFILUX") <> 0 Then MsgBox
Wb.LastErrorMessage: Exit Sub
'Pour
l'année 1999
If Wb.OpenBookYear("Ex. 1999") <> 0
Then MsgBox Wb.LastErrorMessage: Exit Sub
'Importation au format DBF
If Wb.Import.FileFormat("DBF") = False Then
MsgBox Wb.LastErrorMessage: Exit Sub
'Spécification du directory contenant les fichiers
importés
If Wb.Import.Directory(App.Path &
"\ImportFiles") = False Then MsgBox Wb.LastErrorMessage: Exit Sub
‘
Spécification du format d’origine de l’importation
wb.import.linkformat= wbWinbooks
'Demander un backup des datas et des fichiers importés
If Wb.Import.Backup(App.Path &
"\Backup") = False Then
MsgBox
Wb.LastErrorMessage
Exit Sub
End If
'On importe des factures de Décembre
If
Wb.Import.SetDefaultPeriod(Wb.Param.PeriodInternalCode("01/12/1999"))
= False Then MsgBox Wb.LastErrorMessage: Exit Sub
&& ici le set des différentes propriétés qui vont gérer le comportement de l'import
Mike Gagnon
Messages postés381Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention24 octobre 20132 6 déc. 2006 à 21:35
Non, pas exactement
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds
= Sleep (20)
Sur deux ligne. En fait un declaration peut etre fait dans ton main program, et l'appel est simplement
= Sleep (20)