Seite 1 von 1

[Linux] Deklarieren von Arrays in DLL´s

Verfasst: 25.05.2012 11:44
von Justin
Hallo zusammen,

ich möchte eine DLL erstellen die unter Linux verwendert wird. In der PB- Hilfe steht:
Die Deklaration von Arrays, LinkedLists bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
Die AttachProcess- Procedure ist doch aber eine Windows- spezifische Funktion. Wo werden denn Arrays, LinkedLists und Maps in einer DLL für Linux deklariert?

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 25.05.2012 15:51
von Bisonte
äh dll und Linux ? Ich war der Meinung das war Windows only....

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 25.05.2012 15:56
von ts-soft
Bisonte hat geschrieben:äh dll und Linux ? Ich war der Meinung das war Windows only....
Die Dateiextension "*.dll" ist windows only. Dynamische Libraries haben unter Linux im allg. die Endung "*.so"

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 25.05.2012 17:15
von Justin
ömm, aber der Compiler erstellt doch eine *.so, oder? Und wie ist das mit der Deklaration von Arrays usw?

Gruß
Justin

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 26.05.2012 13:00
von Justin
da niemand etwas weiss, muss ich davon ausgehen, dass ich mit PB keine DLL´s für Linux erstellen kann?

Gruß
Justin

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 26.05.2012 13:11
von ts-soft
Der Hinweis zur Deklaration von Arrays steht im Abschnitt der reinen Windows-Funktionen, bezieht sich also nicht
auf Linux, dem zu folge sollte die Deklaration ganz normal erfolgen.

Hab das aber nicht probiert, da solltest Du wohl selber machen.

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 26.05.2012 13:16
von Justin
ja, hab grad nochmal nachgelesen - unter Linex wird eine 'so' erstellt. Ich hoffe mal das funzt auch.
Kurz umrissen, bin ich gerade am Anfang eines Projekt, dass Modular aufgebaut ist und das möchte ic auch unter Linux umsetzen...

Gruß
Justin

Re: [Linux] Deklarieren von Arrays in DLL´s

Verfasst: 14.06.2012 01:09
von Blackskyliner
Definitiv funktioniert das. Hatte damals ein Modulares System entwickelt http://forums.purebasic.com/german/view ... 11&t=19260

Dies funktionierte unter Ubuntu, wie auch unter Windows ganz gut. (Sofern man das Eventsystem bei Linux ersetzt hat, daher hatte ich dann auch angefangen mein eigenes zu Implementieren um neben easyVENT auch eine Linux Variante zu haben... Leider bin ich bei beiden Projekten nicht mehr dran, weil keine Zeit wegen Studium und Arbeit :-\)

Leider ist auch der Host down auf dem das ganze lag, aber wenn Interesse besteht könnte ich das in meinen mehreren GB Projekt-Datenmüll rausfiltern und nochmal hochstellen. (Nicht zu vergessen dass es hoffnungslos veraltet ist, da auf 4.3 entwickelt wurde...

Kurzum, es funktioniert und sogar 'better than expected'. Eine .so ist eine Dynamic Linked Library unter Linux, also nichts anderes was die .dll unter Windows ist. Mit dem unterschied, dass man .so Dateien auch dazu nutzen kann (über LD_PRELOAD) um Funktionen eines Programmes gar komplett zu ersetzen (Sandbox ähnliches Prinzip, da die Anwendung nicht weiß dass sie modifiziert wird). Dies eröffnet interessante Möglichkeiten und sollte für sicherheitstechnische Gründe nie vergessen werden, wie ich finde da man so ziemlich jede Sicherheitsmaßnahme gut umgehen kann, die ein Programm einbaut indem man einfach zugrunde liegende Funktionen kompromittiert, etc. pp.

Nochmal um auf das Attach zurück zu kommen, hab grade kein PB installiert und da du andeutest dass es Windows-Only ist, diese Funktion, würde ich die empfehlen deine Module über ein Interface mit deiner Anwendung zu verklöppeln.

1. Ist das eine gute Art überhaupt Modulbasierte Anwendungne zu entwickeln.
2. Können andere Programmierer bzw. gar andere Programmiersprachen für Module genutzt werden, solange sie dieses Interface implementieren.

Jetzt kommen wir auf das eigentliche Problem, der Definition von Arrays, etc - mein Gott schweife ich wiedermal ab, hoffe es war wenigstens interessant - ich glaube der Meinung zu sein, dass es möglich war diese Dinge im globalen Space definieren zu können. ganz sicher bin ich mir jedoch nicht da aktives arbeiten mit PB, vorallem unter Linux sehr lange zurück liegt... Wie ts-soft schon sagte einfach mal ausprobieren.

Ansonsten kann ich noch zeigen, wie man unter Linux zumidnest das Attachen in C realisieren würde.

Code: Alles auswählen

void __attribute__ ((constructor)) _construct(void);
void __attribute__ ((destructor)) _destruct(void);

void _construct(void)
{
    // Initialisieren
}

void _destruct(void)
{
    // Aufräumen
}
Wobei die Funktionsnamen frei wählbar sind, bzw. auch direkt definierbar wären ohne über eine extra funktion zu gehen. Dann würde statt dem "Funktionspointer" einfach der auszuführende Block da stehen.

_construct würde beim laden der 'so' aufgerufen werden (dlopen())
_destruct würde beim entladen gerufen werden (dlclose())

Hoffe ich konnte damit etwas Licht in die Thematik bringen :)

Weiterführende Informationen findet man unter anderem hier:
http://www.symantec.com/connect/article ... s-part-one
http://www.dwheeler.com/program-library ... ary-HOWTO/

Grüße,
Blackskyliner