Seite 4 von 12

Verfasst: 20.02.2006 00:15
von mk-soft
Habe das ganze noch einmal getestet.
- CLSID und IID stimmen.
- Treiber sind Installiert und Registriert.

Habe das Programm mit meinen Code abgeglichen und getestet.

Code: Alles auswählen

;- Konstanten CLSCTX

#CLSCTX_INPROC_SERVER  = $1 
#CLSCTX_INPROC_HANDLER = $2 
#CLSCTX_LOCAL_SERVER   = $4 
#CLSCTX_REMOTE_SERVER  = $10 

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

;- Structure IID

Structure IID  ; Interface Identifier structure. a IID is a 16byte value, that uniquely
  Data1.l       ; identifys each interface.
  Data2.w
  Data3.w
  Data4.b[8]
EndStructure

Global LastMessage.s
Global LastError.l

; *********************************************************************************************************

Procedure.l CreateUC(MultiByteStr.s)

  Protected *MemoryID.l , len1.l, len2.l
  
  len1 = Len(MultiByteStr)
  len2 = len1 * 2 + 2
  *MemoryID = AllocateMemory(len2) 
  If MultiByteToWideChar_( #CP_ACP, 0, @MultiByteStr, len1, *MemoryID, len2) = 0
    PokeW(*MemoryID, 0)
  EndIf
  ProcedureReturn *MemoryID
  
EndProcedure

; *********************************************************************************************************

Procedure FreeUC(*MemoryID)
  
  If *MemoryID
    FreeMemory(*MemoryID)
  EndIf 

EndProcedure

; *********************************************************************************************************

Procedure AdrUC(*MemoryID)

  ProcedureReturn *MemoryID
  
EndProcedure

; *********************************************************************************************************

Procedure.l SetUC(*MemoryID, MultiByteStr.s)

  FreeUC(*MemoryID)
  CreateUC(MultiByteStr)
  
EndProcedure 


; *********************************************************************************************************

Procedure.l AdUSBConnect()

  Protected *Server.AdUSB
  Protected r1, Server.s
  
  r1 = CoInitialize_(#Null);
  If (r1 <> #S_OK)
    If (r1 = #S_FALSE)
      LastMessage = "COM Library already initialized"
      LastError = r1
    Else
      LastMessage = "Initialisation of COM Library failed. ErrorCode= " + Hex(r1);
      LastError = r1
      ProcedureReturn 0
    EndIf
  EndIf
  
  r1 = CLSIDFromProgID_(CreateUC("ADUSB2XX.ADUSB2XXCtrl.1"), @clsid.IID)
  If (r1 <> #S_OK)
    LastMessage = "Retrival of CLSID failed: ErrorCode= " + Hex(r1);
    LastError = r1
    ProcedureReturn 0
  EndIf

  r1 = CoCreateInstance_(@clsid, #Null, #CLSCTX_LOCAL_SERVER, ?IID_AD_USB2XX, @*Server)
  If (r1 <> #S_OK)
    LastMessage = "Creation of Server-Object failed: ErrorCode= " + Hex(r1);
    LastError = r1
    ProcedureReturn 0
  Else 
    LastMessage = "Connect to Server " + Server
    LastError = 0
    ProcedureReturn *Server
  EndIf  
EndProcedure


; *********************************************************************************************************

hServer = AdUSBConnect()

Debug LastMessage



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
Bekomme immer noch einen Fehler. Muss eindeutig am OCX liegen.

Mehr weiss ich auch nicht mehr. :|

Verfasst: 20.02.2006 00:33
von Falko
Hast Recht, es ist immer noch der selbe Fehler vorhanden.

Creation of Server-Object failed: ErrorCode= 80070005


Ich habe auch das Gefühl, das es an der OCX liegen muss. Mal schauen,
ich habe von der Fa. Abacom noch eine ältere Version bekommen V. 1.51, die bei dessen Programm laufen soll, aber irgendwie zu meinem Modul wohl nicht kompatibel ist. Denn das funktioniert dann nur als
AD-USB 3 und das hat einen DA/AD von nur 12Bit Auflösung.

Ich danke dir aber trotzdem für die Mühe und Hilfe, das du dir die
Zeit für mich genommen hast.

Ich hoffe, ich kann dir irgendwann entgegenkommen :allright:

[Edit]
Wenn das der Fehlercode ist, dann ist es ein Verbotener Zugriff. Vielleicht
muss ich da noch was in Windows ändern.
Code Error 80070005 - Access Denied

Habe ich hier auf dieser Seite gefunden.
http://www.computerperformance.co.uk/Lo ... y_Norbert_

MfG Falko

Verfasst: 20.02.2006 01:09
von mk-soft
An der Berechtigung liegt es nicht. Nachdem ich die Treiber in das System32 Verzeichnis kopiert habe und die xxx.inf aufgerufen habe ist der Treiber bereit. Aber das Objekt aus den OCX kann nicht angelegt werden. FehlerCode 80040154 (Class not Registriert). Habe danch noch einmal von Hand das OCX registriert. "regsvr32 AD_USB2XX.OCX". Das OCX wurde erfolgreich registriert aber immer noch das gleiche ergebnis. Das OCX scheint nur mit VB zu Funktionieren, was aber nicht in Ordnung ist.

Verfasst: 20.02.2006 19:30
von Falko
Den gleichen Fehler erhalte ich, wenn ich das Modul nicht gesteckt habe. Wenn es aber gesteckt ist, dann erhalte ich den Fehler

Creation of Server-Object failed: ErrorCode= 80070005


Ich habe heute morgen den Programmierer noch eine Mail geschrieben.
Die Antwort von ihm war dann folgende.
Friedrich Lorenz hat geschrieben:Sehr geehrter H. XXX,

die OCX-Datei wurde mit Visual C von Microsoft mit den neuesten Updates
entwickelt.
Ich kenne Anwender die über diese Datei da Gerät in den
Programmierumbegungen ansprechen:
- VB
-VC
- Delphi
- LabView
- C vom National Instruments
- Excel
- Access
Diese Anwender haben keine Probleme damit. Vielleicht liegt Ihr Problem
nicht in der OCX,
sondern am Betreiber.

Mit freundlichen Grüßen
Friedrich Lorenz
Also liegt es am Betreiber, der mit Purebasic diese OCX ansprechen will. :roll:

Achja, ich habe noch den IIS nachinstalliert, weil ich meinte, es könnte wegen dem Serverzugriff damit zu tun haben. Aber ich erhalte den gleichen Fehler, wie oben.

MfG Falko

Verfasst: 21.02.2006 00:18
von mk-soft
Lade dir mal die COMlib aXend herrunter.
http://www.purearea.net/pb/download/use ... lg damit.

Verfasst: 21.02.2006 07:33
von Falko
Danke, die hatte ich schon drauf (PB3.94) und damit geht es leider nicht. Die comblib musste ich dann aber auch rausnehmen wegen DroopyLib. Die Variants-Resident habe ich gelassen.

Verfasst: 21.02.2006 14:33
von ts-soft
Falko hat geschrieben:Die comblib musste ich dann aber auch rausnehmen wegen DroopyLib.
Aha :mrgreen: , vielleicht ist die comblib ja bald in droopylib drin, den source wird er wohl noch finden :mrgreen:

Diverse IDs darfste auch nicht verwenden, die verwendet die Lib bereits, zum Beispiel OpenLibrary(1 usw. Am besten man schreibt sich mal ein Buch, was
mit der Lib dann nicht geht oder man nicht benutzen sollte.

Verfasst: 21.02.2006 17:22
von Falko
ts-soft hat geschrieben:
Falko hat geschrieben:Die comblib musste ich dann aber auch rausnehmen wegen DroopyLib.
Aha :mrgreen: , vielleicht ist die comblib ja bald in droopylib drin, den source wird er wohl noch finden :mrgreen:

Diverse IDs darfste auch nicht verwenden, die verwendet die Lib bereits, zum Beispiel OpenLibrary(1 usw. Am besten man schreibt sich mal ein Buch, was
mit der Lib dann nicht geht oder man nicht benutzen sollte.
Ah, hast schon ausprobiert :mrgreen: :mrgreen: . Dann wusstest du schon das die im Zusammenhang mit der Droopy-Lib nicht funst. :mrgreen:


MfG Falko

Verfasst: 21.02.2006 17:34
von ts-soft
Ich hab nur gemerkt, das die in der Lib verwendeten Sources, nicht optimal für eine Lib angepasst wurden. Einige Namen sind zu allgemein, #PB_Any wird nicht durchgehend verwendet, und es wurde nicht versucht, die Unabhängikeit von PB-Libs so gering als möglich zu halten (z.B. LoadLibrary_ anstatt OpenLibrary)
Ich nutze nur den Source der Lib, ist schön Dokumentiert :mrgreen:

Verfasst: 21.02.2006 20:31
von Falko
ts-soft hat geschrieben:... Ich nutze nur den Source der Lib, ist schön Dokumentiert :mrgreen:
:mrgreen:

Aber trotzdem wird der gute Herr Lorenz keine Abweichung von seinem
OCX-Kram schicken, die das Modul AD-USB 4, welches jetzt auch nicht
mehr in der Conrad-Produktpallette mehr vorhanden ist.

Ich hatte ihm danach wieder eine Mail geschrieben, ob er nicht eine
Standard-DLL compilieren könne.

Keine Antwort ist auch eine Antwort. Komische Developement-Firma, die
sich Lorenz GmbH schimpft. Sucht man in google nach dieser,
findet man alles Andere als diese. Eine Suche nach einer Homepage von denen, mit ihrer Software bzw. aktuellen Updates etc. ist vergeblich.

Das wahr wohl leider ein Fehlkauf. Mit Meilhaus.de wäre es kein Problem gewesen, da diese Library, die sich universal-Library nennt, leicht über PB
anzusprechen ist. Diese kann ich jeden wärmstens empfehlen.

Falls jemand es nur per Software testen möchte kann über ein Demoboard alles über die Library, welche sich InstaCall befindet, ausprobieren! Die Universallibrary wird damit auch installiert und die Beschreibung dazu ist hier zu bekommen.

ftp://ftp.measurementcomputing.com/down ... ical32.exe

und hier die Referenz.

Ich verstehe nur nicht, warum die dann noch die Unilib extra verkaufen, wenn man hiermit alles downloaden kann :mrgreen:

http://www.measurementcomputing.com/PDF ... ctions.pdf

http://www.measurementcomputing.com/PDF ... -guide.pdf

MfG Falko