Seite 1 von 1

DLL3D ???

Verfasst: 22.02.2011 15:53
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

Re: DLL3D ???

Verfasst: 22.02.2011 16:23
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.

Re: DLL3D ???

Verfasst: 22.02.2011 17:33
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

Re: DLL3D ???

Verfasst: 22.02.2011 18:01
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:

Re: DLL3D ???

Verfasst: 22.02.2011 19:52
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.

Re: DLL3D ???

Verfasst: 22.02.2011 20:19
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.

Re: DLL3D ???

Verfasst: 22.02.2011 20:29
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.

Re: DLL3D ???

Verfasst: 22.02.2011 20:33
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.