Reine C++ Projekt erstellen und anwenden.
-
Dann sollten die Funktionen mittels
extern "C"deklariert werden (damit das C++ Name Mangeling abgestellt wird).
Und außerdem natürlich dann als freie (bzw. static Klassen-) Funktionen.
Aber welchen Sinn macht es, die DLL dynamisch per LoadLibrary zu laden (anstatt direkt dem Projekt hinzuzufügen)? Möchtest du ein Plugin-System verwenden?
-
MFK schrieb:
Niko_gast schrieb:
Dieses vorgehen bringt mir nicht viel, da ich eigentlcih keine Lib File verwenden möchte.
Warum war es dann ein Problem, dass keine Lib-Datei erstellt wurde?
Nein Lib ist schon erstellt wordenNiko_gast schrieb:
Ich möchte auch nicht den Headerfile verwende.
Dann war das Gehampel mit der Umschaltung zwischen dllimport und dllexport unnötig.
Wenn du unbedingt über LoadLibrary/GetProcAddress gehen willst:
1)Erstens passen deine Funktions-Typedefs nicht zu den exportierten Methoden.
2)Zweitens passen die Namen der Symbole nicht. Schau dir mit dem Dependency Walker an, unter welchem Namen die DLL deine Methoden exportiert .- warum nicht?
2)Ich habe schon geschaut und es stimmt.
- warum nicht?
-
Niko_gast schrieb:
- warum nicht?
Weil beispielsweise der Typ von Person::GetName nicht string()() ist, sondern string(Person::)().
Ist dir klar, dass du ein Person-Objekt brauchst, um GetName aufrufen zu können?
Niko_gast schrieb:
2)Ich habe schon geschaut und es stimmt.
Kann ich mir nicht vorstellen. Mit welchem Namen wird denn der Konstruktor exportiert?
-
@MFK
Ich habe meine code so angepasst:#include <Person.h> #include "stdafx.h" #include <string> #include <iostream> #include <windows.h> int main() { HINSTANCE hInstLibrary = ::LoadLibrary("CPP_DLL.dll"); if (hInstLibrary) { Person* p = new Person("hasdh","blala","M",31); if(p == NULL) { cout << "Objekt nicht geladen!"; getchar(); FreeLibrary(hInstLibrary); return 2; } cout << p->SagHallo() << endl; getchar(); FreeLibrary(hInstLibrary); } else { std::cout << "DLL Failed To Load!" << std::endl; } std::cin.get(); return 0; }es klappt leider nicht
was mache ich den falsch?
-
Was genau klappt denn nicht? gibt es einen Kompiler-Fehler bzw. Warnung?
Oder welche Ausgabe ist herausgekommen?Mfg mdn
-
folgende Fehlermeldungen :
error C2065: 'Person' : undeclared identifier
error C2065: 'p' : undeclared identifier
error C2061: syntax error : identifier 'Person'
error C2227: left of '->SagHallo' must point to class/struct/union/generic type
-
Fehler ist aufgehoben
#include "Person.h"

danke
-
Niko_gast schrieb:
Fehler ist aufgehoben
#include "Person.h"
Du verwendest jetzt Lib und Header. LoadLibrary kannst du dann auch weglassen.
-
MFK schrieb:
Niko_gast schrieb:
Fehler ist aufgehoben
#include "Person.h"
Du verwendest jetzt Lib und Header. LoadLibrary kannst du dann auch weglassen.
Mir ist leider nicht anderes aufgefallen
aber wenn ich dich frage wie kann ich den LoadLibrary benutzen ohne Header File
und Lib zu benutzendanke in voraus
-
Nur mit C-Funktionen. Für eine Klasse brauchst du den Header.