Page 1 sur 1

DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 10:44
par Guillot
salut tout le monde,

j'ai mis au point de nombreuses fonctions pour la création de mesh et de texture
je voulais vous les proposer sous forme d'une DLL, mais j'ai pas réussi
je me demande si il est possible d'utiliser des fonctions provenant des bibliothèques PB (3D, 2ddrawing, vectordrawing) dans une DLL

l'un d'entre vous à t-il essayé / reussi
je ne connais rien dans le domaine des DLL, si quelqu'un peut m’éclairer


j'étais parti (bille en tete)

avec ça pour la DLL ("test.dll"):

Code : Tout sélectionner

ProcedureDLL init3d()
  InitEngine3D() 
  InitSprite() 
  ProcedureReturn 1
EndProcedure

ProcedureDLL test3d(mesh.i)
  CreateCube(mesh,2)
  ProcedureReturn 2
EndProcedure

ProcedureDLL testdrawing(output.i)
  StartDrawing(output) 
  Circle(300,300,100,0)  
  StopDrawing()
  ProcedureReturn 3
EndProcedure

ProcedureDLL testvdrawing(output.i)
  StartVectorDrawing(output)  
  AddPathCircle(300,300,100)
  VectorSourceColor($ff000000)
  StrokePath(1)
  StopVectorDrawing()
  ProcedureReturn 4
EndProcedure

et ça pour la tester :

Code : Tout sélectionner

If OpenLibrary(0, "test.dll")=0:MessageRequester("!!","erreur dll"):End:EndIf

Prototype.i init3d()
Prototype.i test3d(mesh.i)
Prototype.i testdrawing(output.i)
Prototype.i testvdrawing(output.i)


init3d.init3d=GetFunction(0,"init3d")
test3d.test3d=GetFunction(0,"test3d")
testdrawing.testdrawing=GetFunction(0,"testdrawing")
testvdrawing.testvdrawing=GetFunction(0,"testvdrawing")
;======================================================================================================

; ;init3d() 
;   InitEngine3D() 
;   InitSprite() 
; 
; OpenWindow(0, 0, 0, 800,600, "Exemple de Tube 3D", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; OpenWindowedScreen(WindowID(0), 0, 0, 800,600, 0, 0, 0)
; CreateLight(#PB_Any, RGB(25, 25, 180), -5, 10, 5, #PB_Light_Point)
; CreateCamera(0, 0, 0, 100, 100)
; MoveCamera(0, 2, 4, 3, #PB_Absolute | #PB_Local)
; CameraLookAt(0, 0, 0, 0)
; 
; CreateTube(0, 0.5, 0.4, 0.2)
; ;Debug test3d(0)
; CreateEntity(0, MeshID(0), #PB_Material_None)
; Repeat
;   RenderWorld()
;   FlipBuffers()
; Until WaitWindowEvent(1) = #PB_Event_CloseWindow


OpenWindow(0, 0, 0, 800,600, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0,0,0,800,600)
LoadFont(0, "arial", 20)

;Debug testdrawing(CanvasOutput(0))
Debug testvdrawing(CanvasVectorOutput(0))


Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow

Re: DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 11:09
par Zorro
tout est possible
sauf ça :
Est-il permis d'utiliser des DLL réalisées avec PureBasic dans d'autres projets?

Généralement oui. Vous pouvez créer des DLL incluant des commandes PureBasic pour vos propres projets sans aucune restriction. Mais il n'est pas permis de publier des Dll simples "wrapper" pour inclure les commandes PureBasic dans d'autres langages de programmation.

Re: DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 12:07
par Ar-S
J'ai jamais testé. En revanche, pourquoi ne pas créer un fichier module plutôt qu'une DLL ?

Re: DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 12:55
par Guillot
à zorro:
je comptais faire une DLL destinée à PB, donc pas de probleme d'ordre 'legal'
le probleme est d'ordre technique

à Ar-s:
je reconnais que ça peut paraître un peu con de ne pas donner le code source
c'est juste que j'aurais voulu laisser l'exclusivité de ces fonctions à PB
si je donne les sources, ça sera facilement adaptable dans d'autres langages
ok, c'est un peu présomptueux, d'autant qu'il n'y a rien de revolutionnaire...
le principal intérêt est de pouvoir creer des décors generé uniquement par code, donc tres rapidement et simplement
et de pouvoir proposer des jeux de seulement quelques mega avec des décors correctes

Re: DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 14:54
par comtois
Guillot a écrit :le principal intérêt est de pouvoir creer des décors generé uniquement par code, donc tres rapidement et simplement
et de pouvoir proposer des jeux de seulement quelques mega avec des décors correctes
Et pourquoi ne pas les ajouter dans la lib 3D de PureBasic directement ?

[EDIT]
J'ai parlé trop vite, je devine pourquoi :)
Tu n'as pas accès aux autres lib de PB, et tes fonctions utilisent la lib 2DDrawing et VectorDrawing ? c'est ça ?

Re: DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 16:43
par Guillot
à comtois :
oui, je peux pas l'integrer dans l' engine3d.dll
mais je pense pas que ce soit probleme
les commande de PB sont, je pense, écrites en PB
il suffirait d'ajouter les miennes
faudrait interroger fred sur la possibilité de proposer des fonctions ecrites en PB
mais concernant mes fonctions sur les meshs et textures, je pense que c'est trop tot
j'aimerai, avant, pouvoir les adapter a des besoins auquels j'ai pas encore penser
ça serai donc bien d'attendre les retours des utilisateurs puis de proposer des fonctions 'mature',
qui prennent en compte les besoins de chacun (dans la mesure du possible bien sur)
ça eviterai de les modifier à chaque nouvelle version de PB

Re: DLL utilisant des bibliothèques PB

Publié : jeu. 20/avr./2017 19:44
par comtois
non il n'y a que l'éditeur qui est écrit en PB, les fonctions de PB sont écrites en C, regarde dans ton répertoire PureBasic\SDK\VisualC pour avoir des exemples.