Seite 4 von 4
Verfasst: 29.04.2009 20:49
von Kaeru Gaman
IMA = Invalid Merory Access
... aber selbst wenn es keinen IMA gab, dass nicht aus Proc korrekt zurückgekehrt wurde, spricht für einen korrupten Stack.
vielleicht wird ja sonstwohin "zurück"gesprungen, wo der Prozess sich ohne IMA aufhängt?
Verfasst: 29.04.2009 20:50
von Kiffi
heiße Luft hat geschrieben:Dann sollte die CallFuctionFast doch beendet sein oder?
Schuss ins Blaue (ich hatte vor Jahren ein ähnliches Problem):
Versuch mal Call
CFunction() bzw. Call
CFunctionFast()
Grüße ... Kiffi
Verfasst: 29.04.2009 21:03
von ts-soft
heiße Luft hat geschrieben:
@TS-Soft
IMA?
Warum sollte ich CallFunctionFast und/oder CallFunction meiden?
Wo liegt der Vorteil von Prototypes?
Diese beiden Funktionen gibts nur noch aus Kompatibilitätsgründen und
sollten eigentlich garnicht benutzt werden.
Wenn Du bei CallFunctionfast einen Parameter zuviel oder zuwenig übergibts,
sieht der compiler es nicht, es stürzt einfach ab, bzw. IMA.
Desweiteren werden bei CallFunctionFast alle Parameter als Long übergeben,
so das wenn z.B. Quad erforderlich sind, man diese selber in 2 Longs
aufteilen muß.
Prototypes sind genauso wichtig wie Variablendeklaration!
Also am besten garnicht erst anfangen mit CallFunction, CallFunctionFast
und deren derivaten für CDECL.
Gruß
Thomas
Verfasst: 29.04.2009 22:05
von heiße Luft
Ok, das konnte ich nicht wissen.
Mir wurden ja auch die CallFunction´s ans Herz gelegt.
Werde mich morgen versuchen um zu orientieren.
Danke erstmal
heiße Luft
Verfasst: 30.04.2009 14:23
von heiße Luft
Erfolg!!
Zumindest den Hänger habe ich raus.
Was man nicht machen sollte:
Nimm niemals einen Visual Basic Code den Du nicht selbst geschrieben hast und versuche ihn 1:1 auf PB anzuwenden.
Was ich gemacht habe:
Ich habe in die Doku geschaut.
Im VB Code wurden der PivLink Funktion 5 Argumente übergeben.
In der Doku stehen 7 Argumente beschrieben.
Diese habe ich eingerichtet und übergeben.
Jetzt kam wenigstens eine Fehlermeldung (vorher blieb das Prog. kommentarlos hängen) und zwar der erwartete "Invalid memory access (read error at adress 0)".
In einem weiteren VB Beispiel, diesmal aus der Doku, wurden der Funktion nur 6 Argumente übergeben. Das was fehlte habe ich auch weggelassen und siehe da es funzt.
Wenn das so weitergeht wird's lange dauern bis ich meine Anwendung habe.
Grüße
heiße Luft
Verfasst: 05.05.2009 16:37
von heiße Luft
Oh Mann, jetzt habe ich erst verstanden was TS-Soft meinte.
ts-soft hat geschrieben:Das Paket werde ich mir nicht installieren
Die DLLs ohne Header-Dateien sind nutzlos. In den Developer Tools sollten
auch Dateien mit der Endung .h sein, die sind wichtig! Evtl. noch die doku
dazu.
Und ich wundere mich warum ich an dem VB Code nicht so richtig daran lang blicke.
Ok B&R liefert zwei Include/Header Dateien mit.
Einmal die PviCom.bas für VB und die PviCom.h für C.
TS-Soft schrieb irgendwas vom einbinden der .h Datei.
Kommt PB automatisch klar (import) oder muß ich die Datei für PB anpassen.
Auch schrieb TS-Soft etwas von
ts-soft hat geschrieben:
Diese beiden Funktionen gibts nur noch aus Kompatibilitätsgründen und
sollten eigentlich garnicht benutzt werden.
Wenn Du bei CallFunctionfast einen Parameter zuviel oder zuwenig übergibts,
sieht der compiler es nicht, es stürzt einfach ab, bzw. IMA.
Desweiteren werden bei CallFunctionFast alle Parameter als Long übergeben,
so das wenn z.B. Quad erforderlich sind, man diese selber in 2 Longs
aufteilen muß.
Prototypes sind genauso wichtig wie Variablendeklaration!
Also am besten garnicht erst anfangen mit CallFunction, CallFunctionFast
und deren derivaten für CDECL.
Gruß
Thomas
wie mache ich das denn?
Wie sieht das Gegenstück zu
Code: Alles auswählen
OpenLibrary(0,"PviCom.dll")
Adresse = GetFunction(0,"PviInitialize") ; Adresse der Funktion PviInitialize holen
errNum = CallFunctionFast(Adresse,ComTimeout, Retrytime,"0",0) ; PVI Manager initialisieren
mit Pseudotypes aus?
Grüße hL
Verfasst: 05.05.2009 16:51
von ts-soft
Das Gegenstück:
Code: Alles auswählen
Prototype Adresse(ComTimeout, Retrytime, bla$, bla.l)
; .....
Define.i PvDLL
Procedure PviComInit()
Shared PvDLL
PvDLL = OpenLibrary(#PB_Any, ""PviCom.dll"")
If PvDLL
Global Adresse.Adresse = GetFunction(PvDLL, "PviInitialize")
; ...
ProcedureReturn PvDLL
EndIf
ProcedureReturn #False
EndProcedure
Procedure PviComFree()
Shared PvDLL
If PvDLL
CloseLibrary(PvDLL)
EndIf
EndProcedure
PviComInit() ; DLL laden (einmalig)
Define errNum
errNum = Adresse(ComTimeout, Retrytime, "0", 0)
Im SDK von PureBasic findeste einen HeaderConverter, der aber nicht
alles unterstützt, ist aber ein anfang. Ansonsten macht man sich da händisch eine Include draus.
Notfalls übertrage ich Dir die, wenns dann nicht soviel ist.
(meist nur minimale C-Grundkenntnisse erforderlich)
Gruß
Thomas
Verfasst: 05.05.2009 20:37
von heiße Luft
Hallo Thomas,
auf den ersten Blick wirken die Prototypes doch ein wenig komplizierter aus als die CallFunktion.
Ist die SDK von der PureBasic IDE aus zu erreichen oder muss ich noch was laden ?
ts-soft hat geschrieben:
Im SDK von PureBasic findeste einen HeaderConverter, der aber nicht
alles unterstützt, ist aber ein anfang. Ansonsten macht man sich da händisch eine Include draus.
Notfalls übertrage ich Dir die, wenns dann nicht soviel ist.
(meist nur minimale C-Grundkenntnisse erforderlich)
Gruß
Thomas
Danke fürs Angebot, aber wirklich nur im Notfall. (heißt: ich stelle mich saublöd an(was passieren kann))
Ich könnte das auch von Hand machen. Ist nicht ganz soviel. Aber der HeaderConverter interessiert mich schon.
Also einen Deklarationsteil als PBI auslagern, so ist das doch gemeint?
Ich habe mal beide Dateien hoch geladen, kannst ja mal drüber schauen und mir sagen ob ich Stolpersteine zu erwarten habe.
header
Update
Den Header Converter habe ich gefunden. Funktioniert gut. Hat anscheinend alles umgesetzt.
Was hat es denn mit den Tools DLL Importer und Interface Importer aus der SDK Library auf sich?
Ist der DLL Importer vielleicht für meinen Fall hilfreich?
Viele Grüße hL