OCX und das, mit dem Cocreate usw.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

OCX und das, mit dem Cocreate usw.

Beitrag von Falko »

Kann mir hierbei jemand helfen, wie ich folgende OCX in PB aufrufen muss,
damit ich ein Hardwaremodul damit ansprechen kann?

Dank ts-soft sein Tip habe ich mal versucht mit dem TotalComander 6.5a
folgende OCX auszulesen und es enstand dann folgende Auflistung.
Wie geht es in PB weiter.
Es wäre sehr schön, wenn mir da jemand weiterhelfen könnte.
Im Voraus vielen Dank.
TotalComander hat geschrieben:// Generated .IDL/C++ pseudo source equivalent of Win32 type library ..\AD_USB2XX.ocx
[
uuid({279E968D-F134-464E-ACE8-FC0D23958063}),
version(1.0),
helpstring("AD_USB2XX ActiveX-Steuerelement-Modul"),
helpfile("AD_USB2XX.hlp"),
helpcontext(00000000)
]
library AD_USB2XXLib
{
// Forward references and typedefs
dispinterface _DAD_USB2XX;
dispinterface _DAD_USB2XXEvents;

[
uuid({BFD9E61F-75C4-4B33-8949-73A64F014514}),
helpstring("Dispatch-Schnittstelle für AD_USB2XX Control")
]
dispinterface _DAD_USB2XX
{
properties:
methods:
[id(0)] boolean Scan(short DeviceNr);
[id(1), propget] double AnalogVoltage(
short DeviceNr,
short Channel);
[id(2), propput] void AnalogVoltage(
short DeviceNr,
short Channel,
double rhs);
[id(3), propget] short DigIO(short DeviceNr);
[id(4), propput] void DigIO(
short DeviceNr,
short rhs);
[id(5)] double GetAnalogDiffVoltage(
short DeviceNr,
short Channel);
[id(6)] short GetDeviceType(short DeviceNr);
[id(7)] short GetError(short DeviceNr);
[id(8)] short GetSerialNr(short DeviceNr);
[id(9), propget] long AnalogIO(
short DeviceNr,
short Channel);
[id(10), propput] void AnalogIO(
short DeviceNr,
short Channel,
long rhs);
[id(11)] void EnableCalibration(BSTR Password);
[id(12), propget] long Calibration(
short DeviceNr,
short IO,
short Level,
short Channel);
[id(13), propput] void Calibration(
short DeviceNr,
short IO,
short Level,
short Channel,
long rhs);
[id(14), propget] short SerialNr(short DeviceNr);
[id(15), propput] void SerialNr(
short DeviceNr,
short rhs);
[id(16)] double ReadAnalogVoltage(
short DeviceNr,
short Channel);
[id(17)] void WriteAnalogVoltage(
short DeviceNr,
short Channel,
double Voltage);
[id(18)] short ReadDigIn(short DeviceNr);
[id(19)] void WriteDigOut(
short DeviceNr,
short Value);
[id(20)] void DataIO(short DeviceNr);
[id(21)] void Close();
};

[
uuid({9A894BB7-0F68-429D-A30A-FCE4F6379D78}),
helpstring("Ereignisschnittstelle für AD_USB2XX Control")
]
dispinterface _DAD_USB2XXEvents
{
properties:
methods:
};

[
uuid({3FA65AAD-3DF5-4D30-8FA7-799205B01C91}),
helpstring("AD_USB2XX Control")
]
coclass AD_USB2XX
{
[default] dispinterface _DAD_USB2XX;
[default, source] dispinterface _DAD_USB2XXEvents;
};
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

TotalCommander 6.54 ist aktuell :mrgreen:

Warum nutzt Du nicht den Interface-Generator???
Sind doch alle Daten vorhanden, so wie es aussieht
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

ts-soft hat geschrieben:TotalCommander 6.54 ist aktuell :mrgreen:

Warum nutzt Du nicht den Interface-Generator???
Sind doch alle Daten vorhanden, so wie es aussieht
Oh, habe ich die 4 vergessen :mrgreen: Aber du hast auch noch nicht die Aktuelle, denn ein a kommt auch noch dran. Habs gestern erst aktualisiert.

Der Interface-Generator scheint ja nur für VB-OCXes zu sein. Die VC6-OCX spuckt außer Kommentare nichts Internes aus. Das hatte ich schon versucht.

Auch wird über das Messmodul AD-USB4 nicht viel im Internet veröffentlicht. Sogar die Herstellerfirma www.IVT-Hierschau.de hat mich
direkt an den Programmierer, der sich Friedrich Lorenz nennt, weitergeleitet.
Der hatte mir wiederum nur die OCX und die Befehlsbeschreibung geschickt, mit der ich in PB so nix anfangen kann, wenn ich das Interface dazu nicht generieren kann.
Zusätzlich hatte ich diesen Programmierer 2 mal angeschrieben und darum gebeten ob er nicht eine DLL schreiben würde, damit man es in PB
auch nutzen kann. Aber bis heute noch keine Antwort.
Deswegen der Versuch mit dem TC.

PS. : Aber deswegen steige ich doch nicht auf VisualC um :mrgreen:
Zuletzt geändert von Falko am 11.10.2006 20:54, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

Also, den "ActiveXInterfaceImporter.exe" hab ich nicht gemeint. Sondern den
"Interface_generator.exe". Wenn TC die Daten anzeigen kann, sollte der es
auch können, ansonsten nimmste den Ole-Com Viewer vom PSDK
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich meinte ja auch den Interface-Generator mit dem Gewittericon darauf.
Geht nicht. Ich kann dir ja gerne die OCX schicken, wenn du willst.
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

Nein, bitte nicht. Kann sie nicht gebrauchen!
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Es würde sowieso nichts bringen, da der interface-generator wohl
keine VC6-OcX-Controls dort finden kann.
Du würdest das gleich Ergebnis erhalten! Ein Pb-source ohne Inhalt!
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

Wenn das OCX bei Dir registriert ist, wird er es auch finden, TC findet es ja
auch. Ich mag keine OCX und ActiveX usw. Weil der Mist wird von allen
möglichen Anwendungen installiert und registriert und verbleibt bis zur
nächsten Windows-Neuinstallation auf dem System. Werde mir diese Dinger
also nicht zum Spaß installieren, schlimm genug was ich da auf dem System
für'n Dreck drauf habe (MS-Technik :freak: )
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Sicher ist es registriert. Aber wenn ich kein Interface für PB erstellen kann, womit soll ich dann die controls aufrufen?

Zwar kann ich das mit Powerbasic 8.1 auslesen, aber dort ist auch ein Fehler drinne
---------------------------
PowerBASIC COM Browser
---------------------------
The selected type library is for an ActiveX control, which is not currently supported by PowerBASIC.

Continue?
---------------------------
Ja Nein
---------------------------
Und hier das generierte Interface durch Powerbasic.


' ------------------------------------------------------------
' Library Name: AD_USB2XX ActiveX-Steuerelement-Modul 1.0
' Library File: C:\DOKUME~1\Falko\LOKALE~1\Temp\Excel8.0\AD_USB2XXLib.exd
' ------------------------------------------------------------
' ProgID: ADUSB2XX.ADUSB2XXCtrl.1
' Interface Name: ADUSB2XXAD_USB2XX (Control)
'
' Interface Prefix: ADUSB2XX
' ------------------------------------------------------------

$PROGID_ADUSB2XXADUSB2XXCtrl1 = "ADUSB2XX.ADUSB2XXCtrl.1"


Interface Dispatch ADUSB2XXAD_USB2XX ' (Control)
Member Call Scan<&H00000001>(DeviceNr As Integer<&H00000000>) As Long
Member Get AnalogVoltage<&H0000000D>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>) As Double
Member Let AnalogVoltage<&H0000000D>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>)
Member Get DigIO<&H0000000E>(DeviceNr As Integer<&H00000000>) As Integer
Member Let DigIO<&H0000000E>(DeviceNr As Integer<&H00000000>)
Member Call GetAnalogDiffVoltage<&H00000002>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>) As Double
Member Call GetDeviceType<&H00000003>(DeviceNr As Integer<&H00000000>) As Integer
Member Call GetError<&H00000004>(DeviceNr As Integer<&H00000000>) As Integer
Member Call GetSerialNr<&H00000005>(DeviceNr As Integer<&H00000000>) As Integer
Member Get AnalogIO<&H0000000F>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>) As Long
Member Let AnalogIO<&H0000000F>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>)
Member Call EnableCalibration<&H00000006>(Password As String<&H00000000>)
Member Get Calibration<&H00000010>(DeviceNr As Integer<&H00000000>, IO As Integer<&H00000001>, Level As Integer<&H00000002>, Channel As Integer<&H00000003>) As Long
Member Let Calibration<&H00000010>(DeviceNr As Integer<&H00000000>, IO As Integer<&H00000001>, Level As Integer<&H00000002>, Channel As Integer<&H00000003>)
Member Get SerialNr<&H00000011>(DeviceNr As Integer<&H00000000>) As Integer
Member Let SerialNr<&H00000011>(DeviceNr As Integer<&H00000000>)
Member Call ReadAnalogVoltage<&H00000007>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>) As Double
Member Call WriteAnalogVoltage<&H00000008>(DeviceNr As Integer<&H00000000>, Channel As Integer<&H00000001>, Voltage As Double<&H00000002>)
Member Call ReadDigIn<&H00000009>(DeviceNr As Integer<&H00000000>) As Integer
Member Call WriteDigOut<&H0000000A>(DeviceNr As Integer<&H00000000>, Value As Integer<&H00000001>)
Member Call DataIO<&H0000000B>(DeviceNr As Integer<&H00000000>)
Member Call Close<&H0000000C>()
Member Get Application<&H80010094>() As ADUSB2XXApplication
Member Get Creator<&H80010095>() As Long 'XlCreator
Member Get Parent<&H80010008>() As Variant
Member Get BottomRightCell<&H80010267>() As ADUSB2XXRange
Member Call BringToFront<&H8001025A>() As Variant
Member Call Copy<&H80010227>() As Variant
Member Call CopyPicture<&H800100D5>(optional in Appearance As %XlPictureAppearance<&H00000000>, optional in Format As %XlCopyPictureFormat<&H00000001>) As Variant
Member Call Cut<&H80010235>() As Variant
Member Call Delete<&HFFFFFCDF>() As Variant
Member Call Duplicate<&H8001040F>() As Variant
Member Get Enabled<&H80010258>() As Long
Member Let Enabled<&H80010258>() 'Parameter Type As Long
Member Get Height<&H8001007B>() As Double
Member Let Height<&H8001007B>() 'Parameter Type As Double
Member Get Index<&H800101E6>() As Long
Member Get Left<&H8001007F>() As Double
Member Let Left<&H8001007F>() 'Parameter Type As Double
Member Get Locked<&H8001010D>() As Long
Member Let Locked<&H8001010D>() 'Parameter Type As Long
Member Get Name<&H80010000>() As String
Member Let Name<&H80010000>() 'Parameter Type As String
Member Get OnAction<&H80010254>() As String
Member Let OnAction<&H80010254>() 'Parameter Type As String
Member Get Placement<&H80010269>() As Variant
Member Let Placement<&H80010269>() 'Parameter Type As Variant
Member Get PrintObject<&H8001026A>() As Long
Member Let PrintObject<&H8001026A>() 'Parameter Type As Long
Member Call Select<&H800100EB>(optional in Replace As Variant<&H00000000>) As Variant
Member Call SendToBack<&H8001025D>() As Variant
Member Get Top<&H8001007E>() As Double
Member Let Top<&H8001007E>() 'Parameter Type As Double
Member Get TopLeftCell<&H8001026C>() As ADUSB2XXRange
Member Get Visible<&H8001022E>() As Long
Member Let Visible<&H8001022E>() 'Parameter Type As Long
Member Get Width<&H8001007A>() As Double
Member Let Width<&H8001007A>() 'Parameter Type As Double
Member Get ZOrder<&H8001026E>() As Long
Member Get ShapeRange<&H800105F8>() As ADUSB2XXShapeRange
Member Get Border<&H80010080>() As ADUSB2XXBorder
Member Get Interior<&H80010081>() As ADUSB2XXInterior
Member Get Shadow<&H80010067>() As Long
Member Let Shadow<&H80010067>() 'Parameter Type As Long
Member Call Activate<&H80010130>() As Variant
Member Get AutoLoad<&H800104A2>() As Long
Member Let AutoLoad<&H800104A2>() 'Parameter Type As Long
Member Get AutoUpdate<&H80010418>() As Long
Member Let AutoUpdate<&H80010418>() 'Parameter Type As Long
Member Get Object<&HFFFFFCDE>() As Variant
Member Get OLEType<&H8001041E>() As Variant
Member Get SourceName<&H800102D1>() As String
Member Let SourceName<&H800102D1>() 'Parameter Type As String
Member Call Update<&H800102A8>() As Variant
Member Call Verb<&H8001025E>(optional in Verb As %XlOLEVerb<&H00000000>) As Variant
Member Get LinkedCell<&H80010422>() As String
Member Let LinkedCell<&H80010422>() 'Parameter Type As String
Member Get ListFillRange<&H8001034F>() As String
Member Let ListFillRange<&H8001034F>() 'Parameter Type As String
Member Get progID<&H800105F3>() As String
Member Get AltHTML<&H8001073D>() As String
Member Let AltHTML<&H8001073D>() 'Parameter Type As String
End Interface
Das hatte ich DD schon mal geschickt.
Aber hier ist es nun mal offen im forum. Vielleicht weis jemand, mehr darüber.

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich habs mal so probiert, was so leider nicht geht.

Leider fehlt mir das Verständnis dazu, wie man diesen API-Befehl
richtig anwenden soll. :roll:

Code: Alles auswählen

Interface AdUSB
  Scan(Adr)
  GetSerialNr(Adr)
  GetDeviceType(Adr)
  GetError (Adr)
  DigIO (Adr,NewValue)
  AnalogIO (Adr,Cha,NewValue)
  AnalogVoltage (Adr, Cha, NewValue)
  ReadAnalogVoltage(DeviceNr, Channel)
  ReadDigIn(DeviceNr) 
  WriteAnalogVoltage(DeviceNr, Channel, Voltage)
  WriteDigOut(DeviceNr, Value)
  DataIO(DeviceNr)
  Close ()
EndInterface


CoInitialize_(0)
If CoCreateInstance_(?CLSID_AD_USB2XX,0,1,?IID_AD_USB2XX,@object.AdUSB)=0
 For i= 0 To 126
 Debug object\scan(i)
 Debug object\ GetSerialNr(i)
 Debug i
 Next i
 Debug object\GetError(0)
Else
 MessageRequester("Error","Dat will wohl net")
EndIf

DataSection
   CLSID_AD_USB2XX:  ;{3FA65AAD-3DF5-4D30-8FA7-799205B01C91}
   Data.l $3FA65AAD
   Data.w $3DF5, $4D30
   Data.b $8F , $A7 , $79 , $92 , $05 , $B0 , $1C , $91
   IID_AD_USB2XX : ; {279E968D-F134-464E-ACE8-FC0D23958063}
   Data.l $279E968D
   Data.w $F134, $464E
   Data.b $AC , $E8 , $FC , $0D , $23, $95 , $80 , $63
   
EndDataSection
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten