Obj-Dateien und stdafx



  • Hi liebe Community,

    Ich habe mal versucht eine Dll mit Microsoft Visual C++ 2008 zu programmieren. Dabei importiere ich Funktionen aus einer .obj-Datei, die ich bei Projekt->Projektoptionen->C/C++->Kommandozeile einfach angegeben habe (sorry wenn der Pfad nicht ganz korrekt ist, aber ich hab die englische Version). Die .obj-Datei ist im COFF-Format und das Projekt habe ich mit der vorkompilierten Header erzeugt. Nun erscheint aber folgenden Problem beim Build:

    1>c:\users\toddy\documents\visual studio 2008\projects\testdll\importfuncs.obj(3): fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?

    Was soll ich tun? Bitte helft mir, weil ich möchte nicht gerne auf die stdafx.h verzichten und ich hab keine Ahnung wie ich die in meine .obj-Datei mit einbeziehe...

    Danke im Voraus
    MFG
    Toddy


  • Mod

    Du gibst eine Objekt Datei an?
    Warum das? Eine Objekt Datei ist interims Code. Offensichtlich hast Du diese als Source-Code Datei hinzugefügt und nicht für den Linker.

    Wenn Du wirklich beabsichtigst eine fertige OBJ Datei in Dein Projekt einzufügen, dann füge die einfach in Dein projekt ein.

    Ich würde davon aber abraten, den diese Objektdatei müsste mit passenden CRT und Compiler Settings compiliert sein, so dass dieses funktioniert.



  • Hi Martin,

    danke für deine Antwort. Ich habe das schon versucht, die Objekt-Datei direkt über Projekt->Hinzufügen dem Projekt hinzuzufügen, aber wenn ich den Verweis in den Projektoptionen auslasse, erscheint eine Fehlermeldung beim Build, dass die importierten Funktionen undefiniert seien.
    Mein Problem ist einfach, dass ich nur diese fertige Objekt-Datei habe, sozusagen als Bibliothek, und deswegen keine andere Möglichkeit habe, an den Quellcode zu kommen.
    Zu den CRT und Compiler Settings: Gibt es dazu nicht zufällig ein kleines Tutorial?

    MFG
    Toddy


  • Mod

    Dann hast Du die Funktionen nicht so angegeben wiesie in der Objekt datei drin stehen. Wer hat die Objekt Datei erzeugt? Welche Compiler-Version?

    Der Compiler muss passen! 100% Sonst kannst Du es sowieso haken.



  • Wenn ich die Datei ins Projekt über Projekt->Vorhandene Datei hinzufügen hinzufüge, erscheint eine Box, dass ich keine Erzeugungsregel für die Dateiendung .OBJ definiert habe. Aber wenn ich die Obj-Datei in der Kommandozeile in den Projektoptionen weglasse, kommt sowas:

    mydllsrc.obj : error LNK2019: unresolved external symbol "int __cdecl testfunc_main(unsigned char *)" (?testfunc_main@@YAHPAE@Z) referenced in function "void * __cdecl UseTestFunc(char const *,char const *,void *)" (?UseTestFunc@@YAPAXPBD0PAX@Z)

    Die Obj-Datei ist auch von MVS, allerdings eine ältere Version (6 glaube ich). Geht das dann nicht? Oder könnte ich das irgendwie "neuformatieren"?

    MFG
    Toddy


  • Mod

    Du kannst keine fremden Objekt Dateien einmischen. Compiler und Linker sind aufeinander abgestimmt.

    Wenn ich eine Objektdatei in eines meiner Projekte einfüge, dann wird diese automatisch dem Linkerhinzugefügt.

    Weil es eine Objektdatei ist dürftest Du diese nicht dem Compiler übergeben sondern dem Linker. Aber das kanst Du bei einer fremden Objektdatei vergessen!



  • Heißt das also, dass es auf keinen Fall geht? Kann ich da überhaupt nichts machen?


  • Mod

    Nein!



  • Besorg Dir den Source-Code und übersetze es mit dem passenden Compiler neu.


Anmelden zum Antworten