Demo.hpp
Code: Alles auswählen
#ifndef DEMO_HPP
#define DEMO_HPP
class Demo {
    public:
        Demo();
        ~Demo();
        void foo();
        int bar(double value);
};
#endifCode: Alles auswählen
#include <iostream>
#include "Demo.hpp"
Demo::Demo() {
    std::cout << "Demo instance created\n";
}
Demo::~Demo() {
    std::cout << "Demo instance destroyed\n";
}
void Demo::foo() {
    std::cout << "Demo did foo\n";
}
int Demo::bar(double value) {
    std::cout << "Demo did bar\n";
    return (int)value;
}Code: Alles auswählen
g++ -fPIC -c Demo.cpp
g++ -shared -o libDemo.so Demo.oUnd dann gleich die nächste Frage: Wie würde das aussehen, wenn ich die Anwendung für Windows kompiliere und ausführen will?
LG Glocke
/EDIT: Ich hab noch was gefunden aber das scheint auch nicht so richtig die Lösung zu sein:
test.cpp
Code: Alles auswählen
#include <dlfcn.h>
#include "Demo.hpp"
int main() {
    void* handle = dlopen("libDemo.so", RTLD_LAZY);
    
    Demo* (*create)(); // constructor
    void (*destroy)(Demo*); // destructor
    
    create = (Demo* (*)())dlsym(handle, "create_demo");
    destroy = (void (*)(Demo*))dlsym(handle, "destroy_demo");
    
    Demo* myDemo = (Demo*)create();
    //myDemo->foo();
    //myDemo->bar(15.3);
    destroy(myDemo);
}
Erstmal meldet es meinen Lieblingsfehler: Speicherzugriffsfehler (Speicherabzug geschrieben), entferne ich die Kommentare (vor den beiden Funktionsaufrufen), kompiliert er nicht einmal
 
 
Und ich hab keinen richtigen Ansatzpunkt dafür/tmp/cc0XrMTf.o: In function `main':
test.cpp:(.text+0x63): undefined reference to `Demo::foo()'
test.cpp:(.text+0x79): undefined reference to `Demo::bar(double)'
collect2: ld gab 1 als Ende-Status zurück
 In C# könnte man ja Reflection nutzen ...
 In C# könnte man ja Reflection nutzen ...  




