pajofego
2006-05-11, 20:08:40
Hallo Leute ich habe mal wieder ein/zwei Probleme mit Dev-C++.
Ich habe eigentlich folgendes vor: Ich möchte mit dem freepascal compiler eine DLL für Windows und für die Linux Welt das Pendant dazu compilieren (wie nennt man das eigentlich für die Linus Welt), um dann über ein C++ Progrämmchen darauf zuzugreifen. Und das stehe ich schon vor folgenden Probleme:
1.) Der Zugriff auf die DLL unter Windows ist soweit mir bekannt auf zwei Arten möglich, 1 x statisch und 2. dynamisch: Dazu habe ich folgenden Code versucht zum compiliert zu bekommen.
1.Variante:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
extern "C" __declspec(dllimport)int addiere (int zahl1, int zahl2);
int main(int argc, char *argv[])
{
// Brauche ich eigentlich diese Zeile?
int __stdcall addiere(int zahl1, int zahl2);
int Ergebnis;
Ergebnis = addiere(1,1);
cout << Ergebnis << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
2. Variante (nicht von mir)
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
typedef int WINAPI (*myfunc_t)(int z1, int z2);
myfunc_t addiere = NULL;
int main(int argc, char *argv[])
{
HINSTANCE dll;
dll = LoadLibrary("mydll.dll");
if (!dll)
{
cout << "LoadLibrary failed" << endl;
return 0;
}
addiere = (myfunc_t) GetProcAddress( dll, "addiere");
if (!addiere)
{
cout << "GetProcAddress failed" << endl;
return 0;
}
cout << addiere(4, 5) << endl;
FreeLibrary(dll);
return 0;
}
Wenn ich das ganze mit dem Dev-C++ Compiler compilieren möchte, so wirf er mir mehrere Linker Fehlermeldungen:
Ich stelle hier einmal die erste rein, ich denke diese wäre am wichtigsten.
D:/Eigene Dateien/Lazarus/TestDLL/main.cpp:21: undefined reference to `_Z7addiereii@8'
Ich bin bei Dev-C++ so vorgegangen, dass ich unter Projekt, Projekt-Optionen->Parameter->Linker...Die Bibliothek mydll.o, die vom freepascal compiler erstellt wird angegeben habe. Fehlt das noch etwas?
So, wenn ich hoffentlich dank eurer Hilfe das zum Laufen gebracht haben sollte, würde mich interessieren, wie man das ganze für eine Linux Variante realisieren kann. Was ist das Gegenstück zu einer DLL/Library und wie bindet man diese dort ein?
Danke im voraus
Gruß
pajofego
Ich habe eigentlich folgendes vor: Ich möchte mit dem freepascal compiler eine DLL für Windows und für die Linux Welt das Pendant dazu compilieren (wie nennt man das eigentlich für die Linus Welt), um dann über ein C++ Progrämmchen darauf zuzugreifen. Und das stehe ich schon vor folgenden Probleme:
1.) Der Zugriff auf die DLL unter Windows ist soweit mir bekannt auf zwei Arten möglich, 1 x statisch und 2. dynamisch: Dazu habe ich folgenden Code versucht zum compiliert zu bekommen.
1.Variante:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
extern "C" __declspec(dllimport)int addiere (int zahl1, int zahl2);
int main(int argc, char *argv[])
{
// Brauche ich eigentlich diese Zeile?
int __stdcall addiere(int zahl1, int zahl2);
int Ergebnis;
Ergebnis = addiere(1,1);
cout << Ergebnis << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
2. Variante (nicht von mir)
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
typedef int WINAPI (*myfunc_t)(int z1, int z2);
myfunc_t addiere = NULL;
int main(int argc, char *argv[])
{
HINSTANCE dll;
dll = LoadLibrary("mydll.dll");
if (!dll)
{
cout << "LoadLibrary failed" << endl;
return 0;
}
addiere = (myfunc_t) GetProcAddress( dll, "addiere");
if (!addiere)
{
cout << "GetProcAddress failed" << endl;
return 0;
}
cout << addiere(4, 5) << endl;
FreeLibrary(dll);
return 0;
}
Wenn ich das ganze mit dem Dev-C++ Compiler compilieren möchte, so wirf er mir mehrere Linker Fehlermeldungen:
Ich stelle hier einmal die erste rein, ich denke diese wäre am wichtigsten.
D:/Eigene Dateien/Lazarus/TestDLL/main.cpp:21: undefined reference to `_Z7addiereii@8'
Ich bin bei Dev-C++ so vorgegangen, dass ich unter Projekt, Projekt-Optionen->Parameter->Linker...Die Bibliothek mydll.o, die vom freepascal compiler erstellt wird angegeben habe. Fehlt das noch etwas?
So, wenn ich hoffentlich dank eurer Hilfe das zum Laufen gebracht haben sollte, würde mich interessieren, wie man das ganze für eine Linux Variante realisieren kann. Was ist das Gegenstück zu einer DLL/Library und wie bindet man diese dort ein?
Danke im voraus
Gruß
pajofego