Unterschiedliche Deklarationen bei VB und PB

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
heiße Luft
Beiträge: 45
Registriert: 21.04.2009 12:04
Computerausstattung: Ausreichend. 3 Pc, 1 Laptop
BS: Win 7 (zum spielen),XP (weils noch da ist), Win 2000(laptop) und Linux (Umbuntu und Mint)
Wohnort: NRW

Unterschiedliche Deklarationen bei VB und PB

Beitrag von heiße Luft »

Hallo Leute,

hL und seine DLL (die unendliche Geschichte):freak:

Ich habe immer noch ein Problem bei meinen Funktionsaufrufen einer DLL
Bei dem Aufruf von (errNum = 0 ist alles Ok bei <> 0 liegt ein Fehler vor)

Code: Alles auswählen

errNum = PviLink(pLinkID,pObjectName,hEventMsg,EventMsgNo,EventParam,pLinkDescriptor)
werden der Funktion 5 Variblen übergeben und 1 wird von der Funktion beschrieben.
Dies sollte pLinkID sein.
Die Funktion wird anscheinend korrekt abgearbeitet da errNum = 0 bleibt.
Aufgerufen wird die Funktion auch da ich schon erfolgreich probiert habe eine Fehlernummer zu provozieren /:->

Leider bleibt pLinkID = 0
Ich habe meine Code schon X mal auf irgendwelche Tippfehler überprüft und bin so langsam am verzweifeln.
Aber Etwas ist mir noch aufgefallen.
Für die DLL gibt’s natürlich ein Include File für VB das ich erst an PB anpassen mußte.
Dort wird die Variable für VB als ByRef deklariert.
Für PB siehts so aus:

Code: Alles auswählen

Prototype.l PviLink(pLinkID.l, pObjectName.s, hEventMsg.l, EventMsgNo.l, EventParam.l,pLinkDescriptor.s)
Global PviLink.PviLink = GetFunction(0, "PviLink")
Für VB so:

Code: Alles auswählen

 Declare Function PviLink Lib "PviCom.dll" (ByRef pLinkID As Long, _
                               ByVal pObjectName As String, ByVal hEventMsg As Long, _
                               ByVal EventMsgNo As Long, ByVal EventParam As Long, _
                               ByVal pLinkDescriptor As String) As Long
kann es damit zu tun haben?

Grüße hL
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

Zitat aus PVI-Doku:
pLinkID ... Zeiger auf Variable zur Aufnahme der Verbindungs-ID.
D.h.: Du musst für pLinkID einen Pointer auf eine Variable vom Typ Long übergeben!

Was enthält pLinkID in Deinem Code???

Code: Alles auswählen

errNum = PviLink(pLinkID,pObjectName,hEventMsg,EventMsgNo,EventParam,pLinkDescriptor)
Versuch es damit:

Code: Alles auswählen

LinkID.l
pLinkID.i = @LinkID
errNum = PviLink(pLinkID,pObjectName,hEventMsg,EventMsgNo,EventParam,pLinkDescriptor)
... oder damit:

Code: Alles auswählen

LinkID.l
errNum = PviLink(@LinkID,pObjectName,hEventMsg,EventMsgNo,EventParam,pLinkDescriptor)
cu, guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
heiße Luft
Beiträge: 45
Registriert: 21.04.2009 12:04
Computerausstattung: Ausreichend. 3 Pc, 1 Laptop
BS: Win 7 (zum spielen),XP (weils noch da ist), Win 2000(laptop) und Linux (Umbuntu und Mint)
Wohnort: NRW

Beitrag von heiße Luft »

Danke Guido ,

jetzt wird der Wert eingetragen.
Leider mußte ich feststellen das mit der Deklaration zwar etwas nicht korrekt war und konnte das auch korrigieren, aber leider ist das wohl nicht die Ursache für meine Probleme. :roll:
Leider habe ich immer noch keinen Zugriff und bekomme immer eine Fehlernummer beim Versuch auf eine Variable der SPS zuzugreifen.
Es ist deprimierend, denn in VB klappt es sofort.
Aber ich bin ehrgeizig und probiere weiter.
Ich fliege am Sonntag erst mal in den Urlaub. Vielleicht kann ich bis dahin noch was reißen.
Anfang Juni wird es dann offiziell und ich gehe nach B&R auf eine Schulung zum Thema PVI (Die DLL und .NET). Dann muß ich ernsthaft damit arbeiten.

noch mal vielen Dank und einen schönen Feiertag

hL
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

pObjectName und pLinkDescriptor Verweisen ja auf Strings!

Nur noch ein Gedanke zum überprüfen:
Könnte es sein, dass Du das PB-Programm in Unicode kompilierst?
Welches String-Format erwartet die PVI?

Evt. folgendes testen:

Code: Alles auswählen

Prototype.l PviLink(pLinkID.l, pObjectName.p-ascii, hEventMsg.l, EventMsgNo.l, EventParam.l,pLinkDescriptor.p-ascii)
Da wird der PB String vor der Übergabe nach ASCII konvertiert!

cu, guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
heiße Luft
Beiträge: 45
Registriert: 21.04.2009 12:04
Computerausstattung: Ausreichend. 3 Pc, 1 Laptop
BS: Win 7 (zum spielen),XP (weils noch da ist), Win 2000(laptop) und Linux (Umbuntu und Mint)
Wohnort: NRW

Beitrag von heiße Luft »

Hallo Guido,

Habe das Problem gefunden.
Beim anlegen des device Objects wird beim pLinkDescriptor die Parameter
com2/BD=57600/irgendwas übergeben.
Richtig muß es lauten
com2 /BD=57600 /irgendwas
Zwei LEERZEICHEN
Da habe ich jetzt 1 ½ Tage hinterhergesucht

bis denn
heiße Luft :twisted:
Antworten