x86/x64 DLL nutzen



  • afk143 schrieb:

    @Jochen:
    Wenn ich aber mit VS2008 keinen konfigurationsabhängigen DLL- Namen festlegen kann

    Kannst du doch.
    Ich verstehe nicht wie man da so lange rumprobieren kann, und es immer noch nicht hinbekommen.

    Bei VS 2008 musst du lediglich den Namen unter "Linker/General/Output File" eintragen.
    Dadurch ändert sich der "TargetName", und damit auch alle Einstellungen die $(TargetName) verwenden.
    Wie z.B. der Name der generierten LIB.

    Mach am besten ein neues Projekt, oder geh alle Einstellungen an denen du rumprobiert hast durch und setze sie auf "<inherit from parent project or defaults>".



  • @hustbaer
    Ich gebe Dir völlig recht, dass das lange Rumprobieren völlig unverständlich ist.
    Deshalb habe ich ein neues Projekt für eine DLL aufgemacht: "UlkLibrary". Dort eine Funktion definiert.

    1. Neue Konfiguration für x64 angelegt.
    2. In Eigenschaften/Linker/Allgemein die Ausgabedatei mit Postfix x64 versehen.
    3. Es enstehen ulklibraryx64.dll, ulklibraryx64.lib,...
    4. Danach ulklibraryx64.dll in das Verzeichnis des aufrufenden Programmes kopiert.
    5. Nun in mein x64- aufrufendes Programm diese Funktion aufgerufen. Vorher über #pragma die ulklibraryx64.lib eingebunden.
    6. Compiler + Linker OK.
    7. Programm gestartet. Fehler: Kann Ulklibrary.dll" nicht finden.

  • Mod

    Was soll den der Quatsch mit den Linkeroptionen. In den allgemeinen Projekteinstellungen legt man den Namen fest!



  • Martin Richter schrieb:

    Was soll den der Quatsch

    Das frage ich mich bei dieser Antwort allerdings auch.

    nn schrieb:

    afk143 schrieb:

    Leider finde ich in meiner deutschen Version von VS-2008 unter allgemeine Eigenschaften keine Möglchkeit, den Zielnamen zu ändern.

    Da hast du recht, ich habe hier gerade 2008 und 2010 in deutsch offen:

    In 2008 steht unter Allgemein:
    Ausgabeverzeichnis
    Zwischenverzeichnis
    Beim Bereinigen zu löschende ...

    In 2010 steht:
    Ausgabeverzeichnis
    Zwischenverzeichnis
    Zielname
    Zielerweiterung
    Bei der Bereinigung zu löschende ...

    Ja, wo ist die denn, in einem deutschen VS2008, gibt es die etwa im Englischen ?

    hustbaer schrieb:

    Bei VS 2008 musst du lediglich den Namen unter "Linker/General/Output File" eintragen.
    Dadurch ändert sich der "TargetName", und damit auch alle Einstellungen die $(TargetName) verwenden.
    Wie z.B. der Name der generierten LIB.

    So habe ich das seit VS 2002 auch verstanden und teilweise auch mit VS 2010 gemacht.

    nn schrieb:

    Martin Richter schrieb:

    Das verändern der Linker Ausgabe Einstellungen führt in VS-2010 und später zu Problemen.

    Kannst du das bitte mal genauer erklären, insbesondere den "und später" - Teil ? ... Welcher Art sind diese Probleme und wann treten sie auf ?

    Natürlich keine Antwort. 🙄



  • Martin Richter schrieb:

    Was soll den der Quatsch mit den Linkeroptionen. In den allgemeinen Projekteinstellungen legt man den Namen fest!

    Den Quatsch kann ich dir zurückgeben 🤡
    Wieso redest du dauernt von einer Einstellung die es bei VS 2008 noch nicht gibt?

    Ja, die Variable $(TargetName) gibt es. Die wird aber nirgends eingegeben, sondern vom Linker Output-Pfad hergeleitet.

    Falls man das sonst noch wo einstellen kann lass es mich wissen. Dort wo es bei VS 2010 einzustellen geht ("Configuration Properties/General") gibt es die Einstellung bei VS 2008 definitiv nicht - hab ich grad extra nachgesehen, da is nix.

    @nn
    Ne, gibt's im Englichen Studio auch nicht, die Einstellung ist bei 2010 neu.



  • afk143 schrieb:

    @hustbaer
    Ich gebe Dir völlig recht, dass das lange Rumprobieren völlig unverständlich ist.
    Deshalb habe ich ein neues Projekt für eine DLL aufgemacht: "UlkLibrary". Dort eine Funktion definiert.

    1. Neue Konfiguration für x64 angelegt.
    2. In Eigenschaften/Linker/Allgemein die Ausgabedatei mit Postfix x64 versehen.
    3. Es enstehen ulklibraryx64.dll, ulklibraryx64.lib,...
    4. Danach ulklibraryx64.dll in das Verzeichnis des aufrufenden Programmes kopiert.
    5. Nun in mein x64- aufrufendes Programm diese Funktion aufgerufen. Vorher über #pragma die ulklibraryx64.lib eingebunden.
    6. Compiler + Linker OK.
    7. Programm gestartet. Fehler: Kann Ulklibrary.dll" nicht finden.

    Rate mal was.
    Ich hab' genau das probiert. Geht wunderbar.
    Klinke mich hier aus, das führt zu nix mehr...



  • Dem hab ich mich schon lange angeschlossen...



  • Hihi.



  • Es ist mir unverständlich, dass die gleichen von mir ausgeführten Aktionen bei anderen PC's funktionieren. Ist mir aber jetzt auch egal, denn ich habe für mich eine praktikable Lösung gefunden. Falls es jemand interessiert:

    1. Es ist nicht nur der Ausgabename unter Linker-Allgemein zu ändern
    2. Es ist auch die Moduldefinition unter Linker-Eingabe mit Postfix x64 zu versehen
    3. Da es die ulklibraryx64.def nicht gibt, wird die ulklibrary.def zur ulklibraryx64.def kopiert.
    4. In ulklibraryx64.def wird in der Zeile LIBRARY der von mir gewünschte Name "ulklibraryx64" eingetragen
      Ich bin jetzt zufrieden und alles funktioniert. Ich erhalte 2 verschiedene DLL's für x86 und x64. Wenn ich die beiden DLL's auch in binärer Form betrachte, sehe ich auch in diesen die gewünschten unterschiedlichen Namen.
      Das war vorher nicht so (nur mit Änderung von Ausgabename = /OUT). Letzteres führte auch immer zur LINKER- Warnung LNK4070, was mich auf den anderen Parameter /DEF aufmerksam machte).

    Dieser Thread kann nun in der Community beendet werden. Ich danke allen, die sich bemüht haben mir zu helfen.


  • Mod

    nn schrieb:

    nn schrieb:

    Martin Richter schrieb:

    Das verändern der Linker Ausgabe Einstellungen führt in VS-2010 und später zu Problemen.

    Kannst du das bitte mal genauer erklären, insbesondere den "und später" - Teil ? ... Welcher Art sind diese Probleme und wann treten sie auf ?

    Natürlich keine Antwort. 🙄

    VS-2010 kann es nicht leiden, wenn die allgemeinen Projekteinstellungen (TargetName) von den Linkerausgabe Einstellungen abweichen.

    Siehe auch:
    http://blog.kalmbach-software.de/2010/04/27/converting-vc-projects-to-vc2010-warning-msb8012/

    BTW: Es gibt Leute die haben nich ein Leben außerhalb des Netzes und sind zeitweilig ganz offline 😉



  • @afk143
    Ah.
    Ich verwende nie .def Files, daher musste ich da auch nie was umstellen.


Anmelden zum Antworten