Hallo, ich habe eine DLL in Visual Studio C++ erstellt. Die DLL benötigt nur ein paar Funktionen aus dem Windows Driver Kit. Leider hat sich aber herausgestellt, das die DLL auch auf .NET 4.0 besteht. Mein Frage lautet nun: wie bekomme ich die Abhängigkeit von .NET 4.0 weg? Was genau muß ich in den Compiler/Linker-Einstellungen vornehmen? Danke und Gruß Georg
Georg schrieb: > ich habe eine DLL in Visual Studio C++ erstellt Nein, Du hast sie in "C++/CLI" bzw. "Managed C++" erstellt. Beides enthält zwar "C++" im Namen, ist aber kein C++, sondern eine Microsoft-Perversion für die .Net-Programmierung, letztlich nur ein anderes Dekor für C# oder VB.Net. Visual Studio enthält aber auch einen exzellenten echten C++-Compiler, wenn Du also Dein Projekt neu anlegst, und bei der Auswahl des Projektes darauf achtest, natives C++ zu verwenden, dann geht das, was Du willst. Nachträglich umstellen allerdings lässt sich das nicht.
Rufus Τ. Firefly schrieb: > Nachträglich umstellen allerdings lässt sich das nicht. Sicher? Letztlich müsste man doch die ganzen Einstellungen, die man mit der Auswahl des falschen Projekts am Anfang macht, auch wieder umsetzen können? Man könnte doch mal vergleichsweise je ein Projekt mit dem richtigen un dem falschen Projekttyp anlegen, und in dem vorhandenen alle entsprechend ummodeln.
Klaus Wachtler schrieb: > Letztlich müsste man doch die ganzen Einstellungen, die man mit der > Auswahl des falschen Projekts am Anfang macht, auch wieder umsetzen > können? Vollständig ausschließen will ich das zwar nicht, aber das dürfte beim Wechsel von .Net auf was richtiges ziemlich bis verdammt kompliziert werden, ist ja nicht so, daß MS die ganzen Optionen und Einstellungen sinnvoll und klar verständlich bezeichnet. Ich traue mir das jedenfalls nicht zu, den für das Erforschen erforderlichen Zeitaufwand schätze ich signifikant größer ein als das Neuanlegen eines Projektes mit den richtigen Einstellungen. Und ich nutze MS-Compiler seit 1992 zum Geldverdienen. Bei VS2010 jedenfalls ist als Ausgangstyp für ein neues Projekt "Win32 Project" zu verwenden, ausgehend davon kann dann zwischen DLL, Konsolapplikation oder auch statischer Library gewählt werden.
Danke erstmal für die schnellen Antworten. >Bei VS2010 jedenfalls ist als Ausgangstyp für ein neues Projekt "Win32 >Project" zu verwenden, ausgehend davon kann dann zwischen DLL, >Konsolapplikation oder auch statischer Library gewählt werden. Genau das habe ich gemacht! Anbei auch noch ein paar Compiler/Linker-Einstellungen. Gruß Georg
Kurzer Nachtrag: Das Problem mit der .NET 4.0 tritt allerdings nur auf, wenn ich die DLL explizit bei C# oder VB lade. Wenn ich bei C++ die DLL implizit (also per Header und LIB) verwende, dann beschwert er sich nur, dass die MSVCR100.dll fehlt, was man dann durch installieren von vcredist_x86.exe beheben kann (was im übrigen genau so umständlich und nervig ist). Für das .NET4.0 interessiert sich das Programm dann garnicht (ich habe das mit einem XP SP2 mit .NET3.5 getestet). Man könnte daraus schließen, dass es also vlt. garnicht an der DLL liegt, sondern an der Anwendung, die die DLL verwendet. Aber sicher bin ich mir da nicht.
Georg schrieb: > Wenn ich bei C++ die DLL implizit (also per Header und LIB) verwende, > dann beschwert er sich nur, dass die MSVCR100.dll fehlt Das kannst Du auch unterbinden, indem Du unter "C Codegenerierung" für die Laufzeitbibliothek statt "Multithreaded-DLL" die entsprechende nicht-DLL-Variante einstellst. > Man könnte daraus schließen, dass es also vlt. garnicht an der DLL > liegt, sondern an der Anwendung, die die DLL verwendet. Das ist dann ganz eindeutig der Fall. Deine DLL ist nicht schuld daran. C# ist eine .Net-Sprache und braucht zwingend die .Net-Runtimeunterstützung, VB ist auch eine .Net-Sprache (wenn es denn was neueres als VB6.0 ist, das schon ein paar Jährchen auf dem Buckel hat).
Danke für die Antworten und Hinweise. Ich werde das mal ausführlich testen und mich dann ggf. bei euch beschweren:). Gruß Georg
Das mit dem Net 4.0 kenne ich, hatte ich auch mal, du kannst unter Projekt eigenschatfen auswählen, für welche Framework-Version du entwickeln willst, kleinst mögliche ist da natürlich das beste, wenn alle benötigten Funktionen vorhanden sind
Leider kann ich nichts auswählen. Bei mir steht .NET 4 und es ist ausgegraut. Das liegt entweder daran, dass ich hier die Express Version habe oder daran, dass nur .NET 4 installiert ist - keine Ahnung. Das mit dem Linker, was Rufus geschrieben hat führt zwar dazu, dass die DLL größer wird (statt 20kb jetzt 75 kb - es werden wohl einige Abhängigkeiten entfernt), aber die msvcr100.dll wird weiterhin vermisst.
der "dependency walker" (http://www.dependencywalker.com/) kann, IIRC, anzeigen, welche DLL welche weiteren Abhängigkeiten mit reinzieht. Damit müsstest du doch feststellen können, ob die Applikation oder deine DLL für die Abhängigkeiten verantwortlich ist.
Hmm, nachdem ich also die DLL entsprechend für statisches Linken angepasst hatte , muss 'irgendwer' die Einstellungen bei der Applikation auf Multithreaded-DLL umgestellt haben. Das ist jetzt auch auf Multithreaded eingestellt und siehe da ... es geht!! Ergebnis: DLL erstellt unter WIN7/.NET 4 (ohne CRT) - lauffähig jetzt auch unter XP SP2/.NET3.5 ohne irgendwelche Nachinstallationen. Nochmal vielen Dank an alle, die bei der Lösung mitgemacht haben! Gruß Georg
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.