DLL crée avec PB mais ...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

DLL crée avec PB mais ...

Message par NY152 »

Bonjour,

J'ai créé une DLL avec PB compilant tout un tas de fonctions qui me sont utiles dans d'autres programmes (codés en VB6 principalement). Seulement voilà, quand j'essaie d'utiliser cette DLL dans un programme PB, ça ne renvois rien ou ça plante totalement.

Etant une quiche en PB (je me débrouille un peu mais bon), j'ai besoin d'un petit coup de pouce.

Code de la DLL (j'ai met pas toutes les fonctions, c'est juste pour comprendre)

Code : Tout sélectionner

ProcedureDLL.I FileSHA1(FileName$)
	If FileSize(FileName$)=-1
		String$="ERREUR"
	Else
		String$=SHA1FileFingerprint(FileName$)
	EndIf
	ProcedureReturn SysAllocStringByteLen_(String$,Len(String$))
EndProcedure
ProcedureDLL AddToRecentsDocuments(FileName.s)
  SHAddToRecentDocs_(2,FileName)
EndProcedure
En VB6, ces fonctions marchent parfaitement

Code : Tout sélectionner

Public Declare Function FileSHA1 Lib "flib.dll" (ByVal FileName As String) As String
Public Declare Function AddToRecentsDocuments Lib "flib.dll" (ByVal FileName As String) As String

Dim sSha1 as String
sSha1 = FileSHA1("E:\Files\archive.zip")
Text1.Text = sSha1 'Et ça fonctionne

Call AddToRecentsDocuments("E:\Files\Maquette.pdf") 'Idem ça marche
En PB, j'ai essayé avec OpenLibrary() mais rien ne fonctionne sur ce que j'ai tenté.

Si quelqu'un peut me donner un début de réponse pour que cela fonctionne (et sur VB6 et sur PB)

D'avance, merci.
.:NY152:.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: DLL crée avec PB mais ...

Message par falsam »

Pour t'aider à comprendre

Code d'une DLL simple à Sauvegarder et a compiler (option compilateur ShareDLL)

Code : Tout sélectionner

ProcedureDLL Addition(x,y)
  ProcedureReturn(x+y)
EndProcedure
(J'ai compilé sous le nom de madll.dll)

Code pour le test

Code : Tout sélectionner

Enumeration
  #MaDLL
EndEnumeration

If OpenLibrary(#MaDLL, "madll.dll")
  Debug CallFunction(#MaDll, "Addition", 40, 20)
  CloseLibrary(#MaDLL)
EndIf
Le résultat devrait être 60
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: DLL crée avec PB mais ...

Message par NY152 »

Ça fonctionne. J'ai remarqué que ça fonctionnait plutôt bien dès que c'est du numérique mais dans le cas de mes fonctions, non puisque c'est du string. Toute la difficulté est là.
.:NY152:.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: DLL crée avec PB mais ...

Message par Backup »

pour un string faut renvoyer l'adresse du String , pas le String

compille ça en "test_dll_string_x86.dll"

Code : Tout sélectionner

 Global ReturnString$
  
  ProcedureDLL.i MaFonction(var.s)
    ReturnString$ = "coucou "+var.s
    ProcedureReturn @ReturnString$
  EndProcedure
puis pour appeler la DLL

Code : Tout sélectionner

; appel de la Dll

If OpenLibrary(0, "test_dll_string_x86.dll") 
debug   PeekS(CallFunction(0, "MaFonction", @" Dobro")) ; je passe juste l'adresse de la chaine  ; le signe'@' sert a ça c'est l'equivalent de VarPTR() dans les vieux Basics
endif

Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: DLL crée avec PB mais ...

Message par Backup »

Au fait , la prochaine fois poste dans "Débutant" ;)

ici c'est pas le bon forum
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: DLL crée avec PB mais ...

Message par NY152 »

Le code fonctionne sous PB mais pas sous VB6. Maintenant je ne sais pas si l'un empêche l'autre ...
.:NY152:.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: DLL crée avec PB mais ...

Message par Backup »

essaye avec
CallCFunction(#Bibliotheque, FunctionName$ [,Parameter1 [, Parameter2...]])

c'est peut etre un probleme de Format

mais respecte bien l'envoie et le retour de l'adresse de la chaine , pas de la chaine directement ;)
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: DLL crée avec PB mais ...

Message par NY152 »

OK je vais veiller à ça merci :)
.:NY152:.
Répondre