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

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
LordK
Beiträge: 28
Registriert: 01.03.2006 21:18

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

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Das ist mir auch schon aufgefallen. Man kann auch nicht die Bibliotheksfunktionen aufzählen, soviel ich mich noch dran erinnere.
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.
LordK
Beiträge: 28
Registriert: 01.03.2006 21:18

Beitrag 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
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag 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. ;)
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 »

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.
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