mueslirocker
Mitglied
Hallo,
ich habe ein kleines Programm in C++ geschrieben.
Eigentlich handelt es sich um ein Programm für Lex, aber ich brauche auch einige Klassen und daher wirds ein cpp statt c Programm.
Ich benutze Cygwin und entsprechend flex und gcc.
So, nun möchte ich mein Programm (hab die main von flex überschrieben) von einem Smalltalkprogramm aus starten und dachte mir, ich lager es also in eine dll aus.
Da kenn ich mich aber überhaupt nicht aus.
Via gcc -shared und dlltool hab ich nun auch eine dll und eine lib Datei gebastelt.
Ich bin mir aber nichtmal sicher, wie ich das in einem anderen C-Programm einbinden könnte.
Exportiert werden müsste ja eigentlich nur die main Methode (ich werde sie dann wohl umbenennen müssen/wollen), aber da gibts halt viele globale Variablen und sonstige Funktionen und sogar andere cpp Dateien, die ich mit einbinden muss.. weiß nicht, ob das Probleme geben könnte.
Beim gcc -shared hab ich alle Objektdateien eingebunden, die ich brauche und in der .def hab ich nur die Start-Methode angegeben.
Also meine Frage.
1.) Ist das bislang so korrekt?
2.) Wie binde ich nun diese .dll bzw .a bei Smalltalk dynamisch ein?
Linken beim Compilieren des Smalltalk Programms soll nicht nötig sein.
3.) Die gleiche Frage stellt sich bei einem C(++) Programm.
Dort konnte ich schon beim Compilieren linken, aber ich will dort auch dynamisch auf die Bibliothek zugreifen können (also quasi eine neue main, die die alte umbenannte aufruft, damit das Programm auch weiterhin von außen gestartet werden kann).
Man muss dazu sagen, dass ich von Smalltalk keine Ahnung habe.
Ich habe mit VisualWorks ein bisschen rumhantiert und mich durch ein Tutorial gearbeitet. Kenne also das Prinzip, aber das wars dann auch schon.
Habe noch was von "DLL and C Connect" gehört, bin mir aber nicht sicher, ob das Tool das richtige ist.
Ich möchte nur diese eine Startmethode mit den passenden Parametern aufrufen.
Ich hoffe, mir kann hier geholfen werden.
/edit
Okay, inzwischen habe ich ein bisschen mehr rausgefunden.
Mit dem "DLL and C Connect" Tool kann man eine neue Klasse erstellen.
Ich glaube man muss sie von der Superklasse Extern(al) ableiten (hab ich zumindest gemacht).
Dort kann man dann importierte Biblios angeben und Prozeduren als Interface deklarieren.
Man erstellt eine Instanz der neuen Klasse und diese kann dann die Funktion ausführen.
Klappt auch sehr gut, aber dynamisch ist das nicht gerade...
Ich weiß aber nicht, ob man bei Smalltalk anders (also dynamisch) Bibliotheken importieren kann.
ich habe ein kleines Programm in C++ geschrieben.
Eigentlich handelt es sich um ein Programm für Lex, aber ich brauche auch einige Klassen und daher wirds ein cpp statt c Programm.
Ich benutze Cygwin und entsprechend flex und gcc.
So, nun möchte ich mein Programm (hab die main von flex überschrieben) von einem Smalltalkprogramm aus starten und dachte mir, ich lager es also in eine dll aus.
Da kenn ich mich aber überhaupt nicht aus.
Via gcc -shared und dlltool hab ich nun auch eine dll und eine lib Datei gebastelt.
Ich bin mir aber nichtmal sicher, wie ich das in einem anderen C-Programm einbinden könnte.
Exportiert werden müsste ja eigentlich nur die main Methode (ich werde sie dann wohl umbenennen müssen/wollen), aber da gibts halt viele globale Variablen und sonstige Funktionen und sogar andere cpp Dateien, die ich mit einbinden muss.. weiß nicht, ob das Probleme geben könnte.
Beim gcc -shared hab ich alle Objektdateien eingebunden, die ich brauche und in der .def hab ich nur die Start-Methode angegeben.
Also meine Frage.
1.) Ist das bislang so korrekt?
2.) Wie binde ich nun diese .dll bzw .a bei Smalltalk dynamisch ein?
Linken beim Compilieren des Smalltalk Programms soll nicht nötig sein.
3.) Die gleiche Frage stellt sich bei einem C(++) Programm.
Dort konnte ich schon beim Compilieren linken, aber ich will dort auch dynamisch auf die Bibliothek zugreifen können (also quasi eine neue main, die die alte umbenannte aufruft, damit das Programm auch weiterhin von außen gestartet werden kann).
Man muss dazu sagen, dass ich von Smalltalk keine Ahnung habe.
Ich habe mit VisualWorks ein bisschen rumhantiert und mich durch ein Tutorial gearbeitet. Kenne also das Prinzip, aber das wars dann auch schon.
Habe noch was von "DLL and C Connect" gehört, bin mir aber nicht sicher, ob das Tool das richtige ist.
Ich möchte nur diese eine Startmethode mit den passenden Parametern aufrufen.
Ich hoffe, mir kann hier geholfen werden.

/edit
Okay, inzwischen habe ich ein bisschen mehr rausgefunden.
Mit dem "DLL and C Connect" Tool kann man eine neue Klasse erstellen.
Ich glaube man muss sie von der Superklasse Extern(al) ableiten (hab ich zumindest gemacht).
Dort kann man dann importierte Biblios angeben und Prozeduren als Interface deklarieren.
Man erstellt eine Instanz der neuen Klasse und diese kann dann die Funktion ausführen.
Klappt auch sehr gut, aber dynamisch ist das nicht gerade...
Ich weiß aber nicht, ob man bei Smalltalk anders (also dynamisch) Bibliotheken importieren kann.
Zuletzt bearbeitet: