DLL3D ???

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

DLL3D ???

Beitrag von Skiller »

Hi PB-Gemeinde,

ist das eigentlich möglich?
Ich wollte über ein externes Programm die 3D-Funktionen über eine PB gernierte DLL aktivieren. da ich den Windows - Handle über GetActiveWindow() abfragen und als Parameter an die DLL übergeben könnte. Leider hakt es in dem Beispiel. Ich nehme an, das liegt an meinem derzeitigen Wissensstand. Falls es jedoch irgendwie funzen könnte, lasst es mich bitte wissen.

Als erstes Create_DLL_3D.PB

Code: Alles auswählen

; Create_DLL_3D
  
ProcedureDLL _3DInit()  
   
   If OpenLibrary(0, #PB_Compiler_Home+"\Compilers\Engine3D.dll")
       
     If InitEngine3D()
        InitMouse()
        InitSprite()
        InitKeyboard()
          
        ProcedureReturn #True
     EndIf
  EndIf
    
  ProcedureReturn #False

EndProcedure
  
ProcedureDLL _3DWindow(nWindow, x, y,Width, Height)
      
   OpenWindowedScreen(nWindow, x, y, Width, Height, #False, 0, 0 )
     
EndProcedure
...und das Testprogramm Check_DLL_3D.PB

Code: Alles auswählen

; Check_DLL_3D

#Library = 0

#WindowWidth  = 390
#WindowHeight = 350

Prototype PT_3DInit()
Prototype PT_3DWindow(nWindow, x, y, Width, Height)

If OpenLibrary(#Library, "MyDLL.dll")

  F_3DInit.PT_3DInit = GetFunction(#Library,"_3DInit")    
  F_3DWindow.PT_3DWindow = GetFunction(#Library,"_3DWindow")    
 
Else
   MessageRequester("Error","Cannot load library") 
   End 
EndIf

l3DInit = F_3DInit()

OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "DLL 3DWindow Demonstration", #PB_Window_MinimizeGadget) 
nWindow = WindowID(0)

If nWindow <> 0  
   
   If l3DInit 
     
     MessageRequester("l3DInit","Init scheint OK")
     F_3DWindow(nWindow,20,20,20,20)  
     
   EndIf
  
   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndIf

CloseLibrary(0)

MessageRequester("Beenden","Session beendet")

End

würde mich wirklich freuen!!!! :bounce:

Gruß Skiller
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DLL3D ???

Beitrag von ts-soft »

Also:
1. Bis jetzt ist das ein PB-Funktionswrapper, also verstößt gegen die Lizens!
2. OpenLibrary ist nicht erforderlich, das machen ja die Init-Funktionen.
3. GetActiveWindow hilft hier auch nicht, damit erfährt man nur, welches
Fenster der Anwendung, wenn diese mehrere Fenster hat, den Fokus hat.
Nicht von einem Fenster einer Fremdanwendung (DLL oder ähnlich).

Ansonsten sollte das alles möglich sein, aber nicht in dieser Form.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Re: DLL3D ???

Beitrag von Skiller »

Oh, oh auch noch illegal. Das woll´n wir ja nicht.
@ts-soft
Ansonsten sollte das alles möglich sein, aber nicht in dieser Form.
Jede Form ist recht!!! :o
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DLL3D ???

Beitrag von ts-soft »

>> Ich wollte über ein externes Programm
Ist dies ein in PB geschriebenes Programm?
Wenn ja, ist die DLL unnötig, wenn Nein,
dann sehe ich da ein Lizens-Problem!

Kann ich aber ohne weitere Infos nicht genauer beurteilen,
bzw. möchte ich das auch nicht, bin kein Rechts-
berater :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: DLL3D ???

Beitrag von Thorium »

ts-soft hat geschrieben:>> Ich wollte über ein externes Programm
Ist dies ein in PB geschriebenes Programm?
Wenn ja, ist die DLL unnötig, wenn Nein,
dann sehe ich da ein Lizens-Problem!

Kann ich aber ohne weitere Infos nicht genauer beurteilen,
bzw. möchte ich das auch nicht, bin kein Rechts-
berater :wink:
Ich denke solange man die DLL nicht als eigenes Produkt anbietet sondern nur selbst nutzt, dürfte es die Lizenz nicht verletzen. Ich macht das auch gerne, der Vorteil ist das man damit DLL's mit verschiedenen Subsystemen kompilieren kann und so ein Spiel mit DirectX und OpenGL anbieten kann ohne die komplette .exe 2 mal zu haben und möglicherweise noch einen Launcher dazuzupacken. Man läd halt einfach die entsprechende DLL.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: DLL3D ???

Beitrag von DarkDragon »

Thorium hat geschrieben:
ts-soft hat geschrieben:>> Ich wollte über ein externes Programm
Ist dies ein in PB geschriebenes Programm?
Wenn ja, ist die DLL unnötig, wenn Nein,
dann sehe ich da ein Lizens-Problem!

Kann ich aber ohne weitere Infos nicht genauer beurteilen,
bzw. möchte ich das auch nicht, bin kein Rechts-
berater :wink:
Ich denke solange man die DLL nicht als eigenes Produkt anbietet sondern nur selbst nutzt, dürfte es die Lizenz nicht verletzen. Ich macht das auch gerne, der Vorteil ist das man damit DLL's mit verschiedenen Subsystemen kompilieren kann und so ein Spiel mit DirectX und OpenGL anbieten kann ohne die komplette .exe 2 mal zu haben und möglicherweise noch einen Launcher dazuzupacken. Man läd halt einfach die entsprechende DLL.
Naja, aber da gehört nicht viel dazu die Parameter für die Funktionen rauszufinden bei einer "Wrapper" DLL, demnach darfst du es garnicht veröffentlichen. Doch das ist ja auch garkein richtiger "Wrapper" den der da oben hat, denn er führt ja schon mehrere Init-Funktionen in einer aus.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DLL3D ???

Beitrag von ts-soft »

OpenWindow und OpenWindowedScreen müssen sowieso entweder beide in der DLL oder beide
im Hauptprogramm, anders kann es garnicht gehen. OpenWindowedScreen erwartet eine PB-ID
und kein hWnd. PB-ID des Fensters ist in der DLL aber nicht gültig wenn dort das Fenster nicht
erstellt wurde und Fremdprogrammen steht der ObjektManager von PB ja garnicht zur Verfügung.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: DLL3D ???

Beitrag von Thorium »

ts-soft hat geschrieben:OpenWindow und OpenWindowedScreen müssen sowieso entweder beide in der DLL oder beide
im Hauptprogramm, anders kann es garnicht gehen. OpenWindowedScreen erwartet eine PB-ID
und kein hWnd. PB-ID des Fensters ist in der DLL aber nicht gültig wenn dort das Fenster nicht
erstellt wurde und Fremdprogrammen steht der ObjektManager von PB ja garnicht zur Verfügung.
Ja richtig, muss alles in die DLL.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten