hi,
ich hätte mal eine frage zu c++ und dll's.
ich habe versucht eine klasse (incl. konstruktor & destruktor) als dll zu compilieren. ich habe dabei das template-file der IDE Dev-C++ verwendet.
naja das hab ich nun kompiliert, gegen mein mein programm, gelinkt was lediglich ein objekt instanziert.
der compiler spuckt nun dies aus.
[Linker error] undefined reference to `DllClass::DllClass()'
und in dem .def file steht unter EXPORTS nichts. (wo eigendlich doch die exportierten funktionen stehen sollten, oder?)
kann mir jemand einen rat geben, wie ich entweder die Klasse in der DLL richtig exportiere ( wobei mich auch der Export von Namespaces interessieren würde)
oder was ich beim linken beachten muss.
---
#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 */
#include <iostream>
class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass(void);
private:
};
#endif /* _DLL_H_ */
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
DllClass::DllClass()
{
std::cout << "Hello World !" << std::endl;
}
DllClass::~DllClass ()
{
}
extern "C"
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
#include <iostream>
#include <stdlib.h>
#include "../testlib/dll.h"
using namespace std;
int main(int argc, char *argv[])
{
DllClass *dc = new DllClass();
delete dc;
system("PAUSE");
return 0;
}
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Andere Compiler verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
oK; Ok;
Danke für deine Hilfe und sorry an alle armen Compiler der Welt die ich Noob jemals beleidigt haben könnte!!
Dann bin ich wohl einfach zu doof zum proggen.
mfg,
chris90
So, ich habe mir jetzt mal den borland bcc-compiler 5.5.2 gedownloadet, da ich anscheinend mit dem Mingw keine Chance hab mit Graphiklibrarys.
Das Problem: Die Filez liegen jetzt bei mir extrahiert auf der festplatte, und zwar unter C:/Programme/Borland (Wo sie ja auch hingehören).
jetzt hab ich eine einfache WinAPI-Application erstellt, die nur ein fenster öffnet. Da mein Dev C++ gemeckert hat, dass es den Befehl "GetStockObject" nicht kennt, will ich es jetzt mit dem bcc compilen.
Dafür habe ich eine batchdatei geschrieben, die so aussieht:
@Echo off
bcc32 -If:\Programme\Borland\include -Lf:\Programme\Borland\Lib\ OwnWindow.cpp
Die datei OwnWindow.cpp liegt nat. im /bin verzeichnis des Borland-Compilers.
Jetzt bekomme ich aber immer die Fehlermeldung : Konnte windows.h nicht includen!
Meine Frage:
Wie gebe ich den Pfad zu den Librarys richtig an (bitte mit einem verständlichen beispiel!!!)?
hab nat. auch schon auf der Borland-Site rumgefuchtelt (http://community.borland.com/article/0,1410,20997,00.html), hab es aber trotzdem nicht hingekriegt.
Danke im voraus,
mfg,
chris90
(forum ging ja mal kurz nicht...)
ich wollte noch sagen: es geht! ich hab mir selber ne lib kompiliert, aber nicht aus dem offizellen source code (weil da gibts die glaux-lib nich mehr...), sondern von hier:
http://www.gate.net/~rpraver/download.html
lw
Hallo,
OK. Ich hab den Fehler. Ich hätte die Compiler-Log genauer lesen sollen:
D:/Programme/Dev-Cpp/include/dx8/dxfile.h:240:2: warning: no newline at end of file
In dxfile.h war am Ende der Datei ein Sonderzeichen. Musste gelöscht werden. Jetzt gehts.
Gruß
tommie
Danke an alle, die mir geholfen haben, besonders an Erhard Henkes - für die Beispiele!
Leider hatte ich am Ende ein zusätzliches Hardware-Problem. Ich wollte ein altes Fischertechnik Interface in Betrieb nehmen.
Die Assembleranweisungen waren in einer Routine für die Analag-Digitalwandlung.
Weil das Programm getestet war, bin ich zunächst davon ausgegangen, dass es laufen würde. Nachdem sich die Sache mit dem Inline-Assembler als schwieriger heraus gestellt hat, habe ich sie mal vorübergehend auskommentiert, um zu sehen, ob das übrige funktioniert. Leider scheint die Hardware defekt zu sein. Tja, Pech.
Jetzt muss ich mich erst mal darum kümmern.
Danach werde ich mir den Assemblerteil noch mal in Ruhe ansehen.
Hallo shade, Gastarbeiter und kingruedi!
Es lag tatsächlich am Editor. Er hatte eingegebene Tabs durch Leerzeichen ersetzt.
Ich habe es mit vi probiert und dann gesehen.
Vielen Dank für Eure Hilfe, vielen Dank Gastarbeiter!
Ich arbeite auf einem XP-Rechner und habe ein Programm mit dem Borland-Compiler
kompiliert.Im Programm wurde aber ein anderes Tastaturlayout unterstützt,nämlich die amerikanische.Kann mir einer sagen,wie ich auf die deutsche Tastatur im Programm umstellen kann?Vielen Dank!
Hallo !
Wie vielleicht alle wissen, gibt es die praktische Möglichkeit unter dem Dev-C++ Kompiler, mit der Taste F9 zu kompilieren und anschließend in einem "Ruck" die neue exe auszuführen.
Leider kommt er bei mir nur bis zum kompilieren und führt danach nichts aus.
Auch andere Kompiler (Borland) verhalten sich gleich.
Betriebssystem: Windows XP Prof. & Linux 9.1
Fehler taucht (natürlich) unter XP auf. Mehrer Neuinstallationen und Versionsab-/aufstuffungen waren erfolgslos.
Vermutung: Irgend eine Sicherheitseinstellung unter XP deaktiviert dies ??!
Wäre um Rat dankbar.
Hey vielen Dank,
das war der entscheidene Hinweis. Ich hatte lediglich vergessen Prism:Prism() auch zu definieren. Peinlich, peinlich... aber aus Fehlern lernt man ja bekanntlich.
MfG, Alex
danke, hab mir aber einen passenden Workarround gebastelt, die FUnktionen sind wohl vorhanden, nur die Header sind leider nicht passend
#ifdef __GNUC__
extern "C" int _chsize(int,long);
//...
#endif