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