Seite 1 von 1

(LINUX) Crash beim aufruf einer ext. library aus einer Proc.

Verfasst: 05.06.2006 10:53
von LordK
Hi Leute,

ich hab jetzt mal PB unter Linux getestet. Funzt ja eigentlich soweit auch ganz gut, ich hab nur folgendes Problem.

Ich hab ein kleines externes LCD das per USB angesprochen wird.
Dafür gibt es ein Lib mit der das Display unter Linux angesprochen werden kann. Das funzt aus PB heraus eigentlich soweit auch, aber wenn ich einen Funktionsaufruf der Lib in eine Procedure auslagere, stürzt das Programm immer am Ende der Procedure ab. Die Funktion aus der Lib und alles danach wird einwandfrei ausgeführt, aber sobald das Programm bei ProcedureReturn oder EndProcedure ankommt ist schluss. Der Debugger erzeugt auch keine Meldung, das Programm läuft einfach nicht weiter.

Dabei ist es völlig egal, ob ich den Funktionsaufruf der Lib mit CallFunction oder CallFunctionFast mache.

Wenn ich den Funktionsaufruf der Lib auskommentiere läuft die Procedure erfolgreich durch.
Wenn ich den funktionsaufruf im "Hauptstrang" des Programmes mach, wird er einwandfrei ausgeführt. Nur sobald eine Procedure um den Aufruf herum ist, ist sense.

Hat jemand eine Idee, woran das liegen kann, und wie ich es beheben/umgehen kann?

Ach ja, es gibt ein Test Programm in C mit der Lib, das funzt einwandfrei.

Gruß

LordK

Verfasst: 05.06.2006 10:55
von DarkDragon
Das ist mir auch schon aufgefallen. Man kann auch nicht die Bibliotheksfunktionen aufzählen, soviel ich mich noch dran erinnere.

Verfasst: 05.06.2006 11:26
von LordK
Hab grad nochmal ein bissi rumprobiert.

Also bei mir hat es jetzt geholfen CallFunctionFast duch CallCFunctionFast zu ersetzten. Scheinbar ist das für Linux wichtig, das alles wie C Funktionen zu behandeln.

Gruß

LordK

Verfasst: 05.06.2006 21:58
von SoS
zu 1.
Ich benutze keine Proceduren mehr sondern Macros.
z.b.

Code: Alles auswählen

Macro LUI_LCDmode(a,b,c,d,e)
  CallFunctionFast(LUI__LCDmode,a,b,c,d,e)
EndMacro
zu 2.
Unter Linux hatte ich das selbe problem das die Lib nur mit CallCFunctionFast ansprechbar war,hatte mich aber weiter nicht gestört. ;)

Verfasst: 05.06.2006 23:28
von ts-soft
Ne lib nach stdcall Konventionen unter Linux, gibts denn sowas auch. Ist doch
das M$-Format. Unter Linux sollten Libs immer im CDECL Format vorliegen,
allso CallCFunction bzw. CallCFunctionFast. In älteren PB-Linux Versionen
wurde das leider noch verkehrt gehändelt.