Sehr spezielles Problem - (DLL + Manifest)
-
Naja also von meiner Seite aus würde ich es schon machen, aber das darf ich nicht, da das firmen-intern ist.
Also ich weiß dass sich das auch alles bisschen komisch anhört, aber es ist halt wirklich bisschen anders wie wenn man "normale" Applikationen erstellt. Wir programmieren hier hauptsächlich DirectShow-Filter, und das was wir da machen, das ist schon sehr sehr speziell. V.a. ist die Filter-Programmierung in DirectShow an sich schon etwas... nun ja... seltsam. Was da z.T. in den Dokus steht kannst oft grad vergessen, weil es dann doch wieder ganz anders ist. Das ist auch bei Leuten hier so, die das schon jahrelang machen. Da ist man oftmals heilfroh wenn man ein Projekt überhaupt compiliert kriegt
-
Naja also von meiner Seite aus würde ich es schon machen, aber das darf ich nicht, da das firmen-intern ist.
kannste kein minimal-bespiel erstellen das den fehler zeigt??
-
Also mich macht einfach stutzig, dass ein Manifest erzeugt wird wenn MFC+CRT auf statischer Bindung stehen.
Erzeuge mal ein Projekt From-Scratch!
EDIT: Noch ne Idee. Schick mir doch nur mal die vcproj Datei, oder alle Object-Dateien.
-
Wie stellst du dir das vor? Also so einfach ist das nicht, da man für einen Filter immer bestimmte Schnittstellen implementieren muss. Aber ich meine ok, generell kann ich da mal schauen... (komm ich heute aber nicht mehr dazu).
Wobei das aber dann auch für denjenigen der sich das anschauen will nicht so einfach ist. Platform-SDK muss installiert sein, ok das haben die meisten wohl. Aber dann muss man erst mal das Projekt kompilieren könne, und ob dus glaubst oder nicht, aber nur weil man bei einem PC das Projekt kompilieren kann, heißt das noch lange nicht dass man es auf dem anderen auch kann (und das hat nix mit hardcodierten Pfaden oder so zu tun, obwohl man da z.T. auch nicht drum rum kommt).
Das fängt z.B. schon damit an, dass es da sog. Baseclasses gibt die man sich selbst kompilieren muss im Platform-SDK, und da gibts manchmal auch Probleme, auch wenn man da schon ne kompilierte Lib-Datei weitergibt...<EDIT>
Das war an "---" gerichtetAlso ich hab dir die Projekt-Datei an die Email-Adresse geschickt die in deinem Blog steht. Interessant ist nur die Win32|Release Konfiguration, die anderen kannst du vergessen, da ich die nicht benutze. Da stehen z.T. Sachen drinnen die ungültig sind.
Ich muss jetzt aber auch los von der Arbeit, sonst verpass ich meinen Bus. Bin erst später wieder zuhause (->Training).
</EDIT>
-
Also das Release Projekt müsste korrekt sein. Es dürfte keinen Bezug auf die MFC+CRT als DLL geben.
Rebuild All hast Du gemacht?
Schau mal mit Dumpbin in die Objekt Dateien, welche einen manifest Eintrag enthält!
-
Jo, hab paar mal Rebuild und Clean und sowas gemacht.
Das mit den Objektdateien kann ich erst morgen machen, da ich dann erst wieder auf der Arbeit bin.
Aber wie gesagt ich will dich gleich mal vorwarnen: Als ich hier vor kurzem angefangen habe zu arbeiten wurde mir auch einiges erzählt wie das so mit DirectShow abläuft... da hab ich zuerst auch mal müde gelächelt, aber habs dann selbst erfahren müssen. Da entbehrt manches wirklich jeglicher Logik...
Muss hier aber jetzt natürlich nicht unbedingt zutreffen.
-
Wie mache ich das denn mit dumpbin, bzw. woran sehe ich dass da ein Manifest enthalten ist? Sry hab noch nie was damit gemacht...
Mal noch ne andere Frage... gibts eigentlich irgendeine Möglichkeit herauszufinden, ob die DLLs von dem vcredist_x86 schon installiert sind?
Bzw. evtl allgemein, dass man eben schauen kann welche Versionen von welcher DLL in diesem Side by Side Ordner installiert sind?
-
Dumpbin /ALL auf eine Objekt Datei durchführen
Meistens steht das Manifest direkt oben.
AW DATA #1
00000000: 20 20 20 2F 6D 61 6E 69 66 65 73 74 64 65 70 65 /manifestdepe
00000010: 6E 64 65 6E 63 79 3A 22 74 79 70 65 3D 27 77 69 ndency:"type='wi
00000020: 6E 33 32 27 20 6E 61 6D 65 3D 27 4D 69 63 72 6F n32' name='Micro
00000030: 73 6F 66 74 2E 56 43 38 30 2E 44 65 62 75 67 43 soft.VC80.DebugC
00000040: 52 54 27 20 76 65 72 73 69 6F 6E 3D 27 38 2E 30 RT' version='8.0
00000050: 2E 35 30 37 32 37 2E 37 36 32 27 20 70 72 6F 63 .50727.762' proc
00000060: 65 73 73 6F 72 41 72 63 68 69 74 65 63 74 75 72 essorArchitectur
00000070: 65 3D 27 78 38 36 27 20 70 75 62 6C 69 63 4B 65 e='x86' publicKe
00000080: 79 54 6F 6B 65 6E 3D 27 31 66 63 38 62 33 62 39 yToken='1fc8b3b9
00000090: 61 31 65 31 38 65 33 62 27 22 20 2F 44 45 46 41 a1e18e3b'" /DEFA
000000A0: 55 4C 54 4C 49 42 3A 22 6D 66 63 38 30 64 2E 6C ULTLIB:"mfc80d.l
000000B0: 69 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A ib" /DEFAULTLIB:
000000C0: 22 6D 66 63 73 38 30 64 2E 6C 69 62 22 20 2F 44 "mfcs80d.lib" /DSiehe C:\WINDOWS\WinSxS Verzeichnis
Dort siehst Du exakt die Namen die auch im Manifest gefordert werden.C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_91481303
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_6e805841
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_cbb27474
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.163_x-ww_681e29fb
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_dec6ddd2
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0
-
Also...
das sieht eigentlich bei allen relativ gleich aus, ist wohl bei allen ein Manifest-Eintrag enhalten. Hier mal ein Auszug:
RAW DATA #1 00000000: 20 20 20 2F 6D 61 6E 69 66 65 73 74 64 65 70 65 /manifestdepe 00000010: 6E 64 65 6E 63 79 3A 22 74 79 70 65 3D 27 77 69 ndency:"type='wi 00000020: 6E 33 32 27 20 6E 61 6D 65 3D 27 4D 69 63 72 6F n32' name='Micro 00000030: 73 6F 66 74 2E 56 43 38 30 2E 43 52 54 27 20 76 soft.VC80.CRT' v 00000040: 65 72 73 69 6F 6E 3D 27 38 2E 30 2E 35 30 36 30 ersion='8.0.5060 00000050: 38 2E 30 27 20 70 72 6F 63 65 73 73 6F 72 41 72 8.0' processorAr 00000060: 63 68 69 74 65 63 74 75 72 65 3D 27 78 38 36 27 chitecture='x86' 00000070: 20 70 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6E 3D publicKeyToken= 00000080: 27 31 66 63 38 62 33 62 39 61 31 65 31 38 65 33 '1fc8b3b9a1e18e3 00000090: 62 27 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A b'" /DEFAULTLIB: 000000A0: 22 75 75 69 64 2E 6C 69 62 22 20 2F 44 45 46 41 "uuid.lib" /DEFA 000000B0: 55 4C 54 4C 49 42 3A 22 75 75 69 64 2E 6C 69 62 ULTLIB:"uuid.lib 000000C0: 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A 22 6D " /DEFAULTLIB:"m 000000D0: 66 63 38 30 2E 6C 69 62 22 20 2F 44 45 46 41 55 fc80.lib" /DEFAU 000000E0: 4C 54 4C 49 42 3A 22 6D 66 63 73 38 30 2E 6C 69 LTLIB:"mfcs80.li 000000F0: 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A 22 b" /DEFAULTLIB:" 00000100: 6D 73 76 63 72 74 2E 6C 69 62 22 20 2F 44 45 46 msvcrt.lib" /DEF 00000110: 41 55 4C 54 4C 49 42 3A 22 6B 65 72 6E 65 6C 33 AULTLIB:"kernel3 00000120: 32 2E 6C 69 62 22 20 2F 44 45 46 41 55 4C 54 4C 2.lib" /DEFAULTL 00000130: 49 42 3A 22 75 73 65 72 33 32 2E 6C 69 62 22 20 IB:"user32.lib" 00000140: 2F 44 45 46 41 55 4C 54 4C 49 42 3A 22 67 64 69 /DEFAULTLIB:"gdi 00000150: 33 32 2E 6C 69 62 22 20 2F 44 45 46 41 55 4C 54 32.lib" /DEFAULT 00000160: 4C 49 42 3A 22 6D 73 69 6D 67 33 32 2E 6C 69 62 LIB:"msimg32.lib 00000170: 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A 22 63 " /DEFAULTLIB:"c 00000180: 6F 6D 64 6C 67 33 32 2E 6C 69 62 22 20 2F 44 45 omdlg32.lib" /DE 00000190: 46 41 55 4C 54 4C 49 42 3A 22 77 69 6E 73 70 6F FAULTLIB:"winspo 000001A0: 6F 6C 2E 6C 69 62 22 20 2F 44 45 46 41 55 4C 54 ol.lib" /DEFAULT 000001B0: 4C 49 42 3A 22 61 64 76 61 70 69 33 32 2E 6C 69 LIB:"advapi32.li 000001C0: 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A 22 b" /DEFAULTLIB:" 000001D0: 73 68 65 6C 6C 33 32 2E 6C 69 62 22 20 2F 44 45 shell32.lib" /DE 000001E0: 46 41 55 4C 54 4C 49 42 3A 22 63 6F 6D 63 74 6C FAULTLIB:"comctl 000001F0: 33 32 2E 6C 69 62 22 20 2F 44 45 46 41 55 4C 54 32.lib" /DEFAULT 00000200: 4C 49 42 3A 22 73 68 6C 77 61 70 69 2E 6C 69 62 LIB:"shlwapi.lib 00000210: 22 20 2F 69 6E 63 6C 75 64 65 3A 5F 5F 61 66 78 " /include:__afx 00000220: 46 6F 72 63 65 45 58 43 4C 55 44 45 20 2F 69 6E ForceEXCLUDE /in 00000230: 63 6C 75 64 65 3A 5F 5F 61 66 78 46 6F 72 63 65 clude:__afxForce 00000240: 53 54 44 41 46 58 20 2F 6D 61 6E 69 66 65 73 74 STDAFX /manifest 00000250: 64 65 70 65 6E 64 65 6E 63 79 3A 22 74 79 70 65 dependency:"type 00000260: 3D 27 77 69 6E 33 32 27 20 6E 61 6D 65 3D 27 4D ='win32' name='M 00000270: 69 63 72 6F 73 6F 66 74 2E 56 43 38 30 2E 4D 46 icrosoft.VC80.MF 00000280: 43 27 20 76 65 72 73 69 6F 6E 3D 27 38 2E 30 2E C' version='8.0. 00000290: 35 30 36 30 38 2E 30 27 20 70 72 6F 63 65 73 73 50608.0' process 000002A0: 6F 72 41 72 63 68 69 74 65 63 74 75 72 65 3D 27 orArchitecture=' 000002B0: 78 38 36 27 20 70 75 62 6C 69 63 4B 65 79 54 6F x86' publicKeyTo 000002C0: 6B 65 6E 3D 27 31 66 63 38 62 33 62 39 61 31 65 ken='1fc8b3b9a1e 000002D0: 31 38 65 33 62 27 22 20 2F 69 6E 63 6C 75 64 65 18e3b'" /include 000002E0: 3A 3F 3F 33 40 59 41 58 50 41 58 40 5A 20 2F 44 :??3@YAXPAX@Z /D 000002F0: 45 46 41 55 4C 54 4C 49 42 3A 22 75 75 69 64 2E EFAULTLIB:"uuid. 00000300: 6C 69 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 lib" /DEFAULTLIB 00000310: 3A 22 75 75 69 64 2E 6C 69 62 22 20 2F 44 45 46 :"uuid.lib" /DEF 00000320: 41 55 4C 54 4C 49 42 3A 22 75 75 69 64 2E 6C 69 AULTLIB:"uuid.li 00000330: 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A 22 b" /DEFAULTLIB:" 00000340: 6F 6C 65 64 6C 67 2E 6C 69 62 22 20 2F 44 45 46 oledlg.lib" /DEF 00000350: 41 55 4C 54 4C 49 42 3A 22 6F 6C 65 33 32 2E 6C AULTLIB:"ole32.l 00000360: 69 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 42 3A ib" /DEFAULTLIB: 00000370: 22 6F 6C 65 61 75 74 33 32 2E 6C 69 62 22 20 2F "oleaut32.lib" / 00000380: 44 45 46 41 55 4C 54 4C 49 42 3A 22 75 75 69 64 DEFAULTLIB:"uuid 00000390: 2E 6C 69 62 22 20 2F 44 45 46 41 55 4C 54 4C 49 .lib" /DEFAULTLI 000003A0: 42 3A 22 75 72 6C 6D 6F 6E 2E 6C 69 62 22 20 2F B:"urlmon.lib" / 000003B0: 44 45 46 41 55 4C 54 4C 49 42 3A 22 6D 73 76 63 DEFAULTLIB:"msvc 000003C0: 70 72 74 22 20 2F 6D 61 6E 69 66 65 73 74 64 65 prt" /manifestde 000003D0: 70 65 6E 64 65 6E 63 79 3A 22 74 79 70 65 3D 27 pendency:"type=' 000003E0: 77 69 6E 33 32 27 20 6E 61 6D 65 3D 27 4D 69 63 win32' name='Mic 000003F0: 72 6F 73 6F 66 74 2E 56 43 38 30 2E 43 52 54 27 rosoft.VC80.CRT' 00000400: 20 76 65 72 73 69 6F 6E 3D 27 38 2E 30 2E 35 30 version='8.0.50 00000410: 36 30 38 2E 30 27 20 70 72 6F 63 65 73 73 6F 72 608.0' processor 00000420: 41 72 63 68 69 74 65 63 74 75 72 65 3D 27 78 38 Architecture='x8 00000430: 36 27 20 70 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6' publicKeyToke 00000440: 6E 3D 27 31 66 63 38 62 33 62 39 61 31 65 31 38 n='1fc8b3b9a1e18 00000450: 65 33 62 27 22 20 2F 44 45 46 41 55 4C 54 4C 49 e3b'" /DEFAULTLI 00000460: 42 3A 22 4C 49 42 43 4D 54 22 20 2F 44 45 46 41 B:"LIBCMT" /DEFA 00000470: 55 4C 54 4C 49 42 3A 22 4F 4C 44 4E 41 4D 45 53 ULTLIB:"OLDNAMES 00000480: 22 20 "
und direkt danach kommt dieses:
Linker Directives ----------------- /manifestdependency:"type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'" /DEFAULTLIB:"msvcprt" /manifestdependency:"type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"mfc80.lib" /DEFAULTLIB:"mfcs80.lib" /DEFAULTLIB:"msvcrt.lib" /DEFAULTLIB:"kernel32.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"msimg32.lib" /DEFAULTLIB:"comdlg32.lib" /DEFAULTLIB:"winspool.lib" /DEFAULTLIB:"advapi32.lib" /DEFAULTLIB:"shell32.lib" /DEFAULTLIB:"comctl32.lib" /DEFAULTLIB:"shlwapi.lib" /include:__afxForceEXCLUDE /include:__afxForceSTDAFX /manifestdependency:"type='win32' name='Microsoft.VC80.MFC' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'" /include:??3@YAXPAX@Z /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"atls.lib" /merge:ATL=.rdata /DEFAULTLIB:"kernel32.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"advapi32.lib" /DEFAULTLIB:"ole32.lib" /DEFAULTLIB:"shell32.lib" /DEFAULTLIB:"oleaut32.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"shlwapi.lib"
-
Dann ist ganz klar, dass die Compiler Optionen für diese CPP Dateien nicht stimmen!
Schau Dir crtdefs.h an! Dort werden die Manifeste gesetzt!
Diese werden eingesetzt nur wenn _DLL gesetzt ist, also wenn /MD oder /MDd definiert ist!Mal eine ganz andere Frage: Hast Du etwa _DLL als Präprozessor-Define selbst gesetzt? Ich habe Deine Projekt-Datei gerade nicht vorliegen, weil diese an meine "private" Adresse gesendet wurde.
Mach mal einen vollen Build und stell mal das Buildlog zur Verfügung!
-
Also...
ich selbst habe _DLL jedenfalls nicht gesetzt(zumindest nicht explizit), könnte aber evtl. sein dass da was von nem anderen Projekt benutzt wurde, da bin ich mir jetzt relativ unsicher. Ich hab jetzt jedenfalls einfach mal kurzerhand alle Präprozessor-Konstanten rausgeschmissen, und jetzt wurde das Manifest tatsächlich so nicht mehr gefüllt, und die Abhängigkeiten auf die (MFC)Runtimes sind ebenfalls wegSehe das auch daran, dass der erzeugte Filter jetzt auch knapp 350 Kb groß ist (davor warens so ca 120 Kb).
Jetzt müsste ich das nur noch irgendwie testenDas blöde ist, dass auf den beiden Test-PCs jetzt schon dieses Redistributable-Package installiert ist, d.h. dass es sowieso auf jeden Fall funktionieren würde. Weißt du ob man das auch wieder irgendwie deinstallieren kann (bzw. wie)?
Wie auch immer.. nochmals vielen Dank
-
Also Fazit: Das Projekt wurde durch falsche und unsinnige defines verbockt. Ich werde mir Deine Projektdatei zu Hause noch mal ansehen.
Du kannst das ganze einfach mit Depends prüfen! Die DLL sollte keine Abhängigkeiten gegen irgendeine CRT DLL haben!
-
Ja hatte das schon mit depends geprüft und da waren auch keine Abhängigkeiten mehr, wollte es aber halt trotzdem nochmal so testen
Das mit den Defines kann man wohl so stehen lassen, ja.