ActiveX DLL verwenden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

ActiveX DLL verwenden

Beitrag von Lebostein »

Hallo,

also ich hab schon zum Thema COM-Objekte und ActiveX im Forum gesucht und noch keine Antwort auf mein Problem gefunden. Alos ich habe eine DLL (es geht um die Steuerung einer Webcam von Logitech), die ein ActiveX-Element zu sein scheint:

http://home.arcor.de/tomysoft/temp/VPortal2.dll

Auf folgende Funktionen kann man direkt zugreifen:

DllCanUnloadNow()
DllGetClassObject()
DllRegisterServer()
DllUnregisterServer()

Folgende Funktionen stecken noch in der DLL, an die ich aber nicht so ohne weiters herankomme (ausgelesen mit PE-Explorer):

http://home.arcor.de/tomysoft/temp/VPortal2.txt

Ist es überhaupt in PB möglich, diese Funktionen zu nutzen? Hat jemand schon mal so etwas gemacht?

----------------------

PS: Mehr Infos zur Logitech SDK gibt es hier: http://home.arcor.de/tomysoft/temp/QCSDKW32.PDF
Dort sind alle Methoden und Properties beschrieben...
Zuletzt geändert von Lebostein am 29.06.2006 10:29, insgesamt 1-mal geändert.
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: ActiveX DLL verwenden

Beitrag von ts-soft »

Lebostein hat geschrieben: Ist es überhaupt in PB möglich, diese Funktionen zu nutzen? Hat jemand schon mal so etwas gemacht?
Ja, mit viel Arbeit!
Mit dem Interface_generator.exe erstellste die notwendigen Interfaces für
PB, also einfach den Pfad zur DLL angeben.

Der Rest würde das Forum sprengen, einfach mal die Beispiele in der ComLib
ansehen, das ComFramework von Freak sollte auch hilfreich sein.

Ein bissel Zeit und probieren, dann sollte es klappen. So eine DLL ist auf
jedenfall einfacher als ein OCX, was eingeschränkt auch geht.
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
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Puh, deine Antwort macht mir Angst. Dann werd ich wohl doch für dieses Problem auf VisualBasic umsteigen...

Nichtsdestotrotz, wo finde ich den "Interface_generator.exe"?
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

Beitrag von ts-soft »

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
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

ts-soft hat geschrieben:http://www.purebasic.fr/english/viewtop ... ght=comlib
Immer für andere suchen :wink:
Tud mir leid, auf die Idee mit der Suche im englischen Forum bin ich heute früh nicht gekommen. Aber schön, dass einem hier trotzdem ohne Murren geholfen wird. Danke!
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Code: Alles auswählen

Interface IVideoPortal Extends IDispatch
  PrepareControl(a,b,c,d)
  GetCameraCount(a,b)
  GetCameraDescription(a,b,c)
  GetCameraType(a,b,c)
  ....
EndInterface

CoInitialize_(#Null)
CoCreateInstance_(?CLSID_VideoPortal, #Null, #CLSCTX_INPROC_SERVER, ?IID_IVideoPortal, @MyPortal.IVideoPortal)
CoUninitialize_()
Wie man die ClassID (CLSID: CLSID_VideoPortal) eines Objekts herausbekommt, ist mir nun klar (einfach den Registry-Eintrag auslesen). Wie aber kommt man an die InterfaceID (IID: IID_IVideoPortal) eines Intefaces dieses Objekts heran?
Zuletzt geändert von Lebostein am 29.06.2006 09:59, insgesamt 1-mal geändert.
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

Beitrag von ts-soft »

Der OLE-COM Viewer im PSDK sollte helfen. In der VB-Ide (oder auch
RealBasic und ähnl.) solltest Du die Infos auch erhalten.
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
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Wie aber kommt man an die InterfaceID (IID: IID_IVideoPortal) eines
> Intefaces dieses Objekts heran?[/quote]

das steht doch in der Text-Datei, die Dein PE-Explorer erzeugt hat, oder?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Kiffi hat geschrieben:das steht doch in der Text-Datei, die Dein PE-Explorer erzeugt hat, oder?

Grüße ... Kiffi
:oops: stimmt...
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Sollte es das schon gewesen sein, ganz ohne COMLIB, ohne ActiveX-DLL? Oder hab ich was übersehen? Es scheint mir fast zu einfach, um sauber und richtig zu sein, aber komischerweise funktioniert es...

Zum Ausführen des Codes die 2 DLLs in das Verzeichnis kopieren, in dem der Code gespeichert und ausgeführt wird:

http://home.arcor.de/tomysoft/temp/VPortal2.dll
http://home.arcor.de/tomysoft/temp/LVPorta2.dll

Code: Alles auswählen

; ---------------------------------------------------------------------
; Ressourcen
; ---------------------------------------------------------------------

; Interface: IVideoPortal
; Ausgelesen mit dem 'Interface_Generator'
; http://home.planet.nl/~aXend/purebasic/Interface_Generator.zip

Interface IVideoPortal Extends IDispatch
  PrepareControl(a,b,c,d)
  GetCameraCount(a,b)
  GetCameraDescription(a,b,c)
  GetCameraType(a,b,c)
  QueryCameraConnected(a,b,c)
  QueryRegistryCameraIndex(a,b)
  GetCameraState(a,b,c)
  ConnectCamera(a,b)
  ConnectCamera2(a)
  DisconnectCamera(a)
  LoadRegistrySettings(a,b)
  SaveRegistrySettings(a,b)
  SetCameraPropertyLong(a,b,c)
  GetCameraPropertyLong(a,b,c)
  PictureToFile(a,b,c,d,e)
  PictureToMemory(a,b,c,d,e,f)
  StartMovieRecording(a,b,c)
  StopMovieRecording(a)
  StepCaptureAddFrame(a)
  MovieRecordWriteSingleFrame(a,b,c)
  GetLastError(a)
  SetVideoFormat(a,b,c,d,e)
  GetVideoFormat(a,b,c,d,e)
  ShowCameraDlg(a,b)
  EnableUIElements(a,b,c,d)
  StartVideoHook(a,b)
  StopVideoHook(a,b)
  GetInternalPictureCount(a,b)
  QueryInternalPictureInfo(a,b,c,d,e,f,g)
  InternalPictureToDisk(a,b,c,d,e,f,g)
  InternalPictureToMemory(a,b,c,d,e,f,g,h)
  DeleteAllInternalPictures(a)
  DeleteLastInternalPicture(a)
  DeleteInternalPicture(a,b)
  SendCommand(a,b,c,d,e,f,g,h)
  Query(a,b,c,d,e,f,g,h)
  get_CameraConnected(a)
  get_CameraIndex(a)
  get_PictureSound(a)
  put_PictureSound(a)
  get_StampTextColor(a)
  put_StampTextColor(a)
  get_StampFontName(a)
  put_StampFontName(a)
  get_StampPointSize(a)
  put_StampPointSize(a)
  get_StampTextShadow(a)
  put_StampTextShadow(a)
  get_StampTextShadowColor(a)
  put_StampTextShadowColor(a)
  get_StampTransparentBackground(a)
  put_StampTransparentBackground(a)
  get_StampBackgroundColor(a)
  put_StampBackgroundColor(a)
  get_EnablePreview(a)
  put_EnablePreview(a)
  get_MovieVideoCompressionFOURCC(a)
  put_MovieVideoCompressionFOURCC(a)
  get_MovieVideoCompressionKeyFrameInterval(a)
  put_MovieVideoCompressionKeyFrameInterval(a)
  get_MovieVideoCompressionQuality(a)
  put_MovieVideoCompressionQuality(a)
  get_MoviePlaybackFPS(a)
  put_MoviePlaybackFPS(a)
  get_MovieAudioSamplesPerSecond(a)
  put_MovieAudioSamplesPerSecond(a)
  get_MovieAudioChannels(a)
  put_MovieAudioChannels(a)
  get_MovieAudioBitsPerSample(a)
  put_MovieAudioBitsPerSample(a)
  get_MovieAudioCompressionFOURCC(a)
  put_MovieAudioCompressionFOURCC(a)
  get_MovieAudioCompressionQuality(a)
  put_MovieAudioCompressionQuality(a)
  get_MovieRecordAudio(a)
  put_MovieRecordAudio(a)
  get_MovieRecordMode(a)
  put_MovieRecordMode(a)
  get_MovieCreateFlags(a)
  put_MovieCreateFlags(a)
  get_MovieRecordingActiveLocal(a)
  get_MovieRecordingActiveGlobal(a)
  get_CameraState(a)
  get_EnableMovieRecordErrorPrompt(a)
  put_EnableMovieRecordErrorPrompt(a)
  get_EnablePictureDiskErrorPrompt(a)
  put_EnablePictureDiskErrorPrompt(a)
  put_StatusBarText(a)
  get_PreviewMaxWidth(a)
  put_PreviewMaxWidth(a)
  get_PreviewMaxHeight(a)
  put_PreviewMaxHeight(a)
  get_VideoHookStateGlobal(a)
  get_VideoHookStateLocal(a)
  get_InternalPictureSupport(a)
  get_InternalThumbnailSupport(a)
EndInterface

; Class-ID: {102225E5-EA25-11D3-886E-00105A154A4D}
; Herausgefunden mit dem 'PE Explorer'
; http://www.heaventools.com/download.htm

DataSection
  CLSID_VideoPortal:
  Data.l $102225E5
  Data.w $EA25,$11D3
  Data.b $88,$6E,$00,$10,$5A,$15,$4A,$4D
EndDataSection

; Interface-ID: {102225E4-EA25-11D3-886E-00105A154A4D}
; Herausgefunden mit dem 'PE Explorer'
; http://www.heaventools.com/download.htm

DataSection
  IID_IVideoPortal:
  Data.l $102225E4
  Data.w $EA25,$11D3
  Data.b $88,$6E,$00,$10,$5A,$15,$4A,$4D
EndDataSection

; Konstanten

#CLSCTX_INPROC_SERVER = 1

; ---------------------------------------------------------------------
; Programmstart
; ---------------------------------------------------------------------

OpenLibrary(0, "VPortal2.dll") ; hier gehört die 'LVPorta2.dll' noch dazu
CallFunction(0, "DllRegisterServer")

CoInitialize_(#Null)
CoCreateInstance_(?CLSID_VideoPortal, #Null, #CLSCTX_INPROC_SERVER, ?IID_IVideoPortal, @MyPortal.IVideoPortal)
CoUninitialize_()

MyPortal\get_PreviewMaxWidth(@result): Debug result ; Sollte '320' sein
MyPortal\get_PreviewMaxHeight(@result): Debug result ; Sollte '240' sein
MyPortal\get_MovieAudioBitsPerSample(@result): Debug result ; Sollte '8' sein

CallFunction(0, "DllUnregisterServer")
CloseLibrary(0)

; ---------------------------------------------------------------------
; Programmende
; ---------------------------------------------------------------------
Zuletzt geändert von Lebostein am 29.06.2006 11:12, insgesamt 1-mal geändert.
Antworten