Hi Leute, ich versuche den angehängten Code mit dev-cpp (4.9.9.2 mit mingw) zu compilieren. Das klappt aber nicht. Ich bekomme nur Hinweise auf undefined reference... Ich denke, das liegt daran, das ich die Libary irgendwie mit einbinden muss. Das lib-file habe ich schon in das dev-cpp\lib Verzeichnis kopiert, hat aber nicht funktioniert. Bekommt irgendwer den angehängten Code mit dev-cpp kompiliert, oder geht das evt. gar nicht? Danke schonmal Werner
"undefined reference" ist keine Meldung des Linkers, sondern eine Meldung des C/C++-Compilers. Wahrscheinlich hast Du irgendeine Headerdatei nicht eingebunden. Natürlich ist es damit nicht erledigt; Du musst obendrein die Library zu Deinem Projekt dazulinken, sonst gibt es eine Fehlermeldung "undefined symbol", die in diesem Falle vom Linker ausgegeben wird. Um die Library zu Deinem Projekt dazuzulinken, genügt es nicht, die in irgendein Verzeichnis zu kopieren, sondern sie muss explizit im Makefile angegeben werden. In solchen Fällen ist es übrigens hilfreich, die genaue Fehlermeldung anzugeben und nicht nur vage zu beschreiben.
Ich habe mal auf die Schnelle drüber gesehen. Zum Kompilieren hatte ich keine Zeit. Da hättest Du die Projektdatei (Projektname.dev) mitgeben müssen. Da ist eine dsp-Datei drin. Das riecht immer nach Visual-C++. Steht auch drin, dass die mit "Microsoft Developer Studio" erstellt wurde. Du musst in den Projektoptionen angeben welche libs Du benutzt. Das wird aber in diesem Fall mit dem dev-cpp nicht gehen. Der benutzt den gcc. Die libs, die Du dabei hast sind aber wohl mit Visual-C++ erstellt. Grüße Andreas
Ok, danke soweit. Wenn ich das richtig verstanden habe muss ich ein neues Projekt anlegen und da die Libary mit einbinden. Bisher hatte ich nur das C-File geöffnet und dann kompiliert. Gib es eine Möglichkeit dev-cpp die in DLL benutzen zu lassen? Ich werd auf jeden Fall morgen erstmal ausprobieren, ob ich das mit dem Projekt hinbekomme. Werner
Moin, so, ich habe mal ein Projekt erstellt. Unter den Projektoptionen habe ich bei dem Linker die dll mit eingetragen. (die lib dateien haben anscheinend das falsche Format) Das Projekt läßt sich jetzt kompilieren. Leider funktioniert die Anwendung nicht, d.h. ich kann die Anwendung starten und Parameter übergeben, leider wird keine CAN Message gesendet. Es gibt aber auch keine Fehlermeldungen. Deshalb nochmal die Frage, kann ich eine DLL so mit einbinden, oder muss ich eine lib Datei im passenden Format haben? Werner
Ich nochmal, soweit ich das bisher verstanden habe, muss ich aus der dll eine Definitionsdatei generieren (lassen) und aus dieser kann ich dann eine Libary erzeugen die ich mit einbinden kann. In der beigelegten Datei habe ich gelesen, das sie das module defination file mit impdef.exe (von Borland) erzeugt haben, und dass dann mit lib.exe in eine ".lib" Datei konviert haben. Könnte mir dabei jemand helfen? mfg Werner
Das Erzeugen einer Importlibrary ist eine Möglichkeit, mit einer DLL umzugehen. Ein anderer Weg, der keine externen Hilfsmittel erfordert und obendrein ein "gnädigeres" Verhalten der Anwendung im Fehlerfalle (DLL fehlt) ermöglicht, besteht darin, die DLL mit LoadLibrary zu laden und mit GetProcAddress die relevanten Funktionspointer zu bestimmen. Der Aufruf der Libraryfunktionen erfolgt danach über die so bestimmten Funktionspointer. Am Beispiel einer DLL mit einer Funktion mit dem Klartextnamen "Init", die einen int zurückliefert und zwei char-Pointer als Argument erwartet, ist hier der Gebrauch von LoadLibrary und GetProcAddress zu sehen: Typedef für Funktionspointer: typedef int (__stdcall *t_initfunc)(char*, char*); Funktionspointer t_initfunc pInitfunc; Laden der DLL: HINSTANCE hModule; hModule = LoadLibrary("meinedll.dll"); if (!hModule) { // fehlerbehandlung } Funktionspointer bestimmen: pInitfunc = (t_initfunc) GetProcAddress(hModule, "Init"); if (!pInitfunc) { // fehlerbehandlung } Funktion aufrufen: int ergebnis; ergebnis = pInitfunc("bla", "fusel"); Nach Gebrauch kann die DLL auch wieder freigegeben werden: FreeLibrary(hModule); Der beim Aufruf von GetProcAddress gebrauchte Klartextname ist der in der DLL stehende Klartextname des exportierten Symbols. Eine Liste der von einer DLL exportierten Symbole erhält man mit Dumpbin /exports meinedll.dll Dumpbin gehört zum Lieferumfang von Microsoft-Compilern, es wird aber sicherlich auch alternative Tools geben, die diese Aufgabe übernehmen können.
Rufus, ich glaube das übersteigt meine Programmierkenntnisse um einiges... Mit Pointern stand ich früher schon auf Kriegsfuss ;-) Ich denke, ich muss mir was anderes überlegen. Trotzdem besten Dank für die Unterstützung. Werner
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.