c++ dll Hilfe Anfänger
-
Hallo,
bin totaler Anfänger was c++ angeht.Ich soll eine dll mit hilfe von c++ ansprechen um an die Funktion ranzukommen, die diese dll hat.
Da ich vorher nicht c++ Programmiert habe, habe mir dev-c++ geholt zum Lernen.
2 Projekte erstellt: dll und Aufruf
DLL erstellen hats geklappt, keine Fehler.
Die dll habe ich in den Projektordnder Aufruf reinkopiert.---DLL
#if defined(_MSC_VER)
#define DLL extern "C" __declspec(dllexport)
#else
#define DLL
#endifclass DLLIMPORT DllClass
{DLL double AddNumbers (double a, double b) {
return a + b;
}
};
---doch beim Aufruf:
---Aufruf
#include <cstdlib>
#include <iostream>
#include <cstdio>extern "C" __declspec(dllimport)double AddNumbers (double a, double b);
int main()
{
double result = AddNumbers(1, 2);
printf("Das Ergebnis ist: %f\n", result);system("PAUSE");
return EXIT_SUCCESS;
}
---
bekomme ich Fehlermeldung:
[Linker error] undefined reference to `_imp__AddNumbers'
ld returned 1 exit status
D:\C++\dll Aufruf\Makefile.win [Build Error] [dll_Aufruf.exe] Error 1Was mache ich falsch?
Bitte um HilfeGruss
Viki
-
Die DLL exportiert eine Methode der Klasse DllClass, und das Hauptprogramm importiert eine freistehende Funktion mit C-Semantik. Will heissen, Du importierst eine ganz andere Funktion als die exportierte. Ich wundere mich sowieso, dass der Compiler eine extern "C" Deklaration einer Methode durchgehen lässt.
Nimm in der DLL mal die ganze Klasse weg und definiere AddNumbers ebenso als freie Funktion wie sie im aufrufenden Programm deklariert ist.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Also ich habe jetze alles neu gemacht:
--> dll
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL /
# define DLLIMPORT __declspec (dllimport)
#endif / Not BUILDING_DLL */extern "C" __declspec(dllexport) double AddNumbers(double a, double b);
double AddNumbers (double a, double b) {
return a + b;
}
########
--> Console Application#include <cstdlib>
#include <iostream>using namespace std;
extern "C" __declspec(dllimport)double AddNumbers(double a, double b);
int main()
{
double result = AddNumbers(1, 2);
printf("Das Ergebnis ist: %f\n", result);system("PAUSE");
return EXIT_SUCCESS;
}*******
Trozdem Fehler:
[Linker error] undefined reference to `_imp__AddNumbers'
ld returned 1 exit status
D:\C++\Makefile.win [Build Error] [Aufruf_dll.exe] Error 1Bin schon am Verzweifeln...
Gruss
Viki
-
1. Bindest Du die bei der DLL-Erzeugung erstellte LIB-Datei in die Konsolenanwendung ein?
2. Ich würde die extern "C" und declspec-Angaben auch bei der Funktionsdefinition nochmal hinschreiben.