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:

Beitrag von Falko »

Wäre schöner, wenn PB4 es einem leichter machen würde. So ähnlich wie in VC++ oder VB. Mit dem OleViewer das Objekt und die Methoden raussuchen und im Programm einbauen. Ich finde das mit den Interfaces
sehr umständlich.

Aber irgendwann wirds auch klappen :allright:

Gruß Falko
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 »

Ist eigentlich anders :wink: , gäbe es kein VB oder VC++, gäbe es das Problem nicht :mrgreen:
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:Ist eigentlich anders :wink: , gäbe es kein VB oder VC++, gäbe es das Problem nicht :mrgreen:
Ja sogesehen hast du vollkommen Recht. Den Programmierer, den ich deswegen zu diesem Modul angeschrieben habe, ändert seine Haltung leider auch nicht. Er hätte ebenso gut in VC eine DLL kompilieren können, was er wohl nicht machen wird.

So behält man keine Kunden.
Bild
Win11 Pro 64-Bit, PB_6.11b1
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Der POLINK Fehler kommt wegen der COMLIB, die es nicht für PB 4 gibt.
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

Beitrag von ts-soft »

Sie verwenden doch den Source der ComLib, der macht eigentlich keine
Probleme unter PB4
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
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Komme jetzt auch nicht mehr weiter. Hab die IDL mal erzeugt.

Code: Alles auswählen

// Generated .IDL file (by the OLE/COM Object Viewer)
// 
// typelib filename: AD_USB2XX.ocx
// Forward Declare all types defined in this typelib
dispinterface _DAD_USB2XX;
dispinterface _DAD_USB2XXEvents;

[
  uuid(279E968D-F134-464E-ACE8-FC0D23958063),
  version(1.0),
  helpstring("AD_USB2XX ActiveX-Steuerelement-Modul"),
  helpfile("AD_USB2XX.hlp"),
  helpcontext(00000000)
]
library AD_USB2XXLib
{
    // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");

    [
      uuid(BFD9E61F-75C4-4B33-8949-73A64F014514),
      helpstring("Dispatch-Schnittstelle für AD_USB2XX Control"),
      hidden
    ]
    dispinterface _DAD_USB2XX {
        properties:
        methods:
            [id(0x00000001)]
            VARIANT_BOOL Scan(short DeviceNr);
            [id(0x0000000d), propget]
            double AnalogVoltage(
                            short DeviceNr, 
                            short Channel);
            [id(0x0000000d), propput]
            void AnalogVoltage(
                            short DeviceNr, 
                            short Channel, 
                            double rhs);
            [id(0x0000000e), propget]
            short DigIO(short DeviceNr);
            [id(0x0000000e), propput]
            void DigIO(
                            short DeviceNr, 
                            short rhs);
            [id(0x00000002)]
            double GetAnalogDiffVoltage(
                            short DeviceNr, 
                            short Channel);
            [id(0x00000003)]
            short GetDeviceType(short DeviceNr);
            [id(0x00000004)]
            short GetError(short DeviceNr);
            [id(0x00000005)]
            short GetSerialNr(short DeviceNr);
            [id(0x0000000f), propget]
            long AnalogIO(
                            short DeviceNr, 
                            short Channel);
            [id(0x0000000f), propput]
            void AnalogIO(
                            short DeviceNr, 
                            short Channel, 
                            long rhs);
            [id(0x00000006)]
            void EnableCalibration(BSTR Password);
            [id(0x00000010), propget]
            long Calibration(
                            short DeviceNr, 
                            short IO, 
                            short Level, 
                            short Channel);
            [id(0x00000010), propput]
            void Calibration(
                            short DeviceNr, 
                            short IO, 
                            short Level, 
                            short Channel, 
                            long rhs);
            [id(0x00000011), propget]
            short SerialNr(short DeviceNr);
            [id(0x00000011), propput]
            void SerialNr(
                            short DeviceNr, 
                            short rhs);
            [id(0x00000007)]
            double ReadAnalogVoltage(
                            short DeviceNr, 
                            short Channel);
            [id(0x00000008)]
            void WriteAnalogVoltage(
                            short DeviceNr, 
                            short Channel, 
                            double Voltage);
            [id(0x00000009)]
            short ReadDigIn(short DeviceNr);
            [id(0x0000000a)]
            void WriteDigOut(
                            short DeviceNr, 
                            short Value);
            [id(0x0000000b)]
            void DataIO(short DeviceNr);
            [id(0x0000000c)]
            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"),
      control
    ]
    coclass AD_USB2XX {
        [Default] dispinterface _DAD_USB2XX;
        [Default, source] dispinterface _DAD_USB2XXEvents;
    };
};
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
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 »

Die hatte ich auch schon mit dem Ole-COM-Viewer ausgelesen. Nur damit konnte ich leider nicht viel anfangen.

Ich wußte nur nicht, wie ich das in PB umsetzen soll, da man schon VC-Kenntnisse haben sollte um es zu verstehen.
Da muß ich leider passen.
Ein Wrapper wäre vielleicht eine Lösung, wenn jemand das für PB anpassen könnte.

MfG Falko
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 »

Könnt ihr ja mal:

Code: Alles auswählen

OpenLibrary(#PB_Any, "stdole2.tlb")
in euren Code einfügen, vielleicht hilfts ja.
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
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@ts-soft
Der rückgabewert von Scan() ist eine Structure-Type von Variant.
PB kann aber diesen Type gar nicht übernehmen?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
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 »

Die Variantstructure ist aber beim Source von der Lib bei.
Es wird ja nur der Pointer zu Variant zurückgegeben, also ein Long

Ansonsten gilt:

Code: Alles auswählen

#VARIANT_TRUE   = $FFFF ; Variant version of TRUE
#VARIANT_FALSE  = $0000 ; Variant version of FALSE
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
Antworten