Aufruf EXE funktioniert nicht



  • Die dll wird aus mehr als dieser einen Funktion bestehen. Die Dll MUSS einen Einstiegspunkt haben.



  • Upps. Hab das net gewusst.
    Wie gesagt ich lern das noch ...
    Aber es funzt doch auf mein Rechner auch ohne Einstiegspunkt. Wieso das?
    Wie muss so ein Einstiegspunkt aussehen?

    Hab jetzt mal Depency Walker auf Rechner ausgeführt was net funzt.
    LOG hier.

    Bei Module steht:
    MSVCP80D.DLL Error opening file. Das System kann die angegebene Datei nicht finden (2).
    MSVCR80D.DLL Error opening file. Das System kann die angegebene Datei nicht finden (2).
    
    Error: The Side-by-Side configuration information for "c:\j\aufruf\AUFRUFMINIDLL.EXE" contains errors. Diese Anwendung konnte nicht gestartet werden, weil die Anwenungskonfiguration nicht korrekt ist. Zur Problembehebung sollten Sie die Anwendung neu installieren (14001).
    Error: At least one required implicit or forwarded dependency was not found.
    
    --------------------------------------------------------------------------------
    Starting profile on 14.09.2007 at 09:50:13
    
    Operating System: Microsoft Windows XP Professional (32-bit), version 5.01.2600 Service Pack 2
    Program Executable: c:\j\aufruf\AUFRUFMINIDLL.EXE
    Program Arguments: 
    Starting Directory: C:\j\aufruf\
    Search Path: C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Programme\Microsoft SQL Server\90\Tools\binn\
    
    Options Selected:
         Simulate ShellExecute by inserting any App Paths directories into the PATH environment variable.
         Log DllMain calls for process attach and process detach messages.
         Hook the process to gather more detailed dependency information.
         Log LoadLibrary function calls.
         Log GetProcAddress function calls.
         Log debug output messages.
         Automatically open and profile child processes.
    --------------------------------------------------------------------------------
    
    Failure starting the process. Diese Anwendung konnte nicht gestartet werden, weil die Anwenungskonfiguration nicht korrekt ist. Zur Problembehebung sollten Sie die Anwendung neu installieren (14001).
    

    Wie es aussieht fehlen diese Dateien
    - MSVCP80D.DLL
    - MSVCR80D.DLL
    auf dem Rechner wo es net funzt.

    Gibt es ein Installpaket was dies beinhaltet?



  • Ach so... Du musst Deiner DLL auch noch eine Manifest-Resource mitgeben!
    Wird ein Manifest in die DLL eingebettet? Steht was von ".manifest." im Debug/Release-Verzeichnis der DLL?

    hast Du das einbetten des Manifests deaktiviert?



  • miniDLL\Debug hat nur eine *manifest*-datei namens:
    - miniDLL.dll.intermediate.manifest

    in der steht:

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    </assembly>
    

    Und in Projekteigenschaften/Konfikurationseigenschaften/Linker/Manifestdatei ist die Option
    Manifest generieren auf Ja eingestellt.

    Folgende DLL's liegen bei mir unter:
    C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c
    - msvcm80d.dll
    - msvcp80d.dll
    - msvcr80d.dll

    Wenn das weiterhilft



  • Ich habs. Geschaft.

    Zusammenfassung:
    Der fremde Rechner benötigt:
    - Microsoft .NET Framework 2.0 Redistributable (x86)
    - Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
    Das ist klar.

    Zu beachten ist, das ein Debug-Projekt andere DLL's braucht als ein Release-Projekt und das Paket "Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)" installiert nur die DLL's für Release.
    Das heißt das die Anwendung (die EXE) aber auch die DLL im Release-Modus erstellt werden muss.

    Welche DLL's auf dem Fremden Rechner fehlen, ermittelt man mit Depency Walker (http://www.dependencywalker.com/). Wenn dann die fehlende DLL (wie bei mir) ein 'D' am ende hat (z.B.: MSVCP80D.DLL), dann nützt auch ein das Paket "Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)" nicht. Denn wie schon gesagt es installiert nur Release-DLL's.

    Hierzu nützliche Links:
    http://msdn2.microsoft.com/de-de/library/zebw5zk9(VS.80).aspx - Bereitstellung (C++) Hier die Links unter beachten.
    http://msdn2.microsoft.com/de-de/library/8kche8ah(VS.80).aspx - Ermitteln der neu zu verteilenden DLLs
    http://msdn2.microsoft.com/de-de/library/ms235299(VS.80).aspx - Verteilen von Visual C++-Dateien
    http://msdn2.microsoft.com/de-de/library/ms235285(VS.80).aspx - Bereitstellungsbeispiele



  • agent schrieb:

    Zu beachten ist, das ein Debug-Projekt andere DLL's braucht als ein Release-Projekt

    Nein!
    Zu beachten ist: Du darfst eine EXE/DLL, welche mit Debug erstellt wurde *nicht* weitergeben, geschweige denn auf einem anderen Rechner (ohne VS) installieren/ausführen!

    Les mal die Eula durch!



  • Ach so, noch was.
    Wie würde meine DLL mit einen Einstiegspunkt aussehen?
    Und meine zweite frage, muss ich einen Einstiegspunkt haben? Wenn ja, wieso funzt es auch ohne? Oder wann muss ich einen Einstiegspunkt haben.

    Ach so, wollte mich zu meinem vorherigen Problem bedanken. Ihr ward echt super, Thanks aber auch. 👍



  • Der Einstiegspunkt wird von der CRT selber erzeugt, wenn Du keinen angibst (auch wenn Du einen angibst, ist der Einstiegspunkt immer die CRT 😉 )



  • Jochen Kalmbach schrieb:

    agent schrieb:

    Zu beachten ist, das ein Debug-Projekt andere DLL's braucht als ein Release-Projekt

    Nein!
    Zu beachten ist: Du darfst eine EXE/DLL, welche mit Debug erstellt wurde *nicht* weitergeben, geschweige denn auf einem anderen Rechner (ohne VS) installieren/ausführen!

    Les mal die Eula durch!

    Oder halt so. Meine Aussage ist aber nicht falsch.



  • Knuddlbaer schrieb:

    Die dll wird aus mehr als dieser einen Funktion bestehen. Die Dll MUSS einen Einstiegspunkt haben.

    Dann versteh ich das nicht.



  • Halbwissen meinerseits.

    Es ist sehr lange her als ich das Thema native DLL schreiben vor mir hatte. Der Einstiegspunkt DLLMain musste dort immer angegeben werden, bei dem damaligen System gab es nichts, was einem diesen Arbeit abnimmt.

    Aus heutiger Sicht ist die Aussage zwar noch richtig (das ein Einstiegspunkt existiert), aber der Gedanke dahinter (DLLMain fehlt) völlig falsch. Streich das einfach beim Lesen 🤡

    "Manifest" ist für mich noch ein Begriff mit dem ich mich auseinandersetzen muss.



  • Knuddlbaer schrieb:

    "Manifest" ist für mich noch ein Begriff mit dem ich mich auseinandersetzen muss.

    Ich auch 😃
    Also nochmal Thanks für alles. Ich komme bestimmt wieder 🙂


Anmelden zum Antworten