Hallo, wie muss ich eine DLL in VS2005 (C++) programmieren, damit sie auf anderen Rechnern ausgeührt werden kann. Ich habe eine Anwedung geschrieben, die diese DLL aufruft. Diese funktioniert auf meinem Rechner auch einwandfreit, aber nicht auf dem meines Kollegen. Woran kann das liegen? Danke
Hallo, bei den Beispielen von LabVIEW findest Du ein Beispiel, wie man eine entsprechende DLL schreibt. siehe: C:\Programme\National Instruments\LabVIEW 8.2\LabVIEW 8.5\examples\dll\hostname Gruß Franz ************************************** PS: /* include extcode.h which contains the prototypes for the LabVIEW functions */ #include <extcode.h> #include <stdio.h> #include <windows.h> BOOL WINAPI DllMain (HANDLE hDLL, DWORD dwReason, LPVOID lpReserved) { return TRUE; } /* This functions gets the computer name and returns it to LabVIEW */ __declspec (dllexport) void MachineName(void *LVHandle) { char computerName[MAX_COMPUTERNAME_LENGTH+1]; int compNameLength = MAX_COMPUTERNAME_LENGTH+1; /* Get computer name */ GetComputerName(computerName, &compNameLength); /* Size LabVIEW handle to the correct size */ DSSetHandleSize(LVHandle, compNameLength + 5); /* Copy the string size to the LabVIEW handle */ **(int32 **)LVHandle = compNameLength ; /* Copy the string to the LabVIEW handle */ sprintf((*(char **)LVHandle)+4,"%s",computerName); } ****************************************
> Ich habe eine Anwedung geschrieben, die diese DLL aufruft. > Diese funktioniert auf meinem Rechner auch einwandfreit, > aber nicht auf dem meines Kollegen. > Woran kann das liegen? Deine DLL wird andere DLLs benötigen, die auf Deinem Rechner installiert sind (da ist ja auch Dein Entwicklungssystem drauf) und die auf dem Rechner Deines Kollegens fehlen. Entweder DLLs zur Verfügung stellen oder durch statisches Linken vermeiden.
Wichtig ist auch: Release und nicht Debug und mit dem Tool: http://www.dependencywalker.com kannst du rausfinden, welche DLLs noch geladen werden. Bzw. welche DLLs nicht geladen werden konnten (Zielrechner) und diese dann rüber kopieren ;o) Viel Glück & Welcome to dll-hell!
Danke Leute für die Antworten. Das hilft mir schon mal weiter, bzw. bestätigt was ich bis jetzt auch schon herausgefunden habe.
Nun da ich weiß wie man die abhängigen DLL´s ausfindig macht würde ich gerne wissen wie ich diese in meine DLL packen kann, sodass ich die abhängigen DLL´s nicht immer mitschleppen muss. Hat da vielleicht jemand eine Idee? Vielen Dank schon mal im Voraus
schreibst du deine DLL vieleicht in C++/CLI? also .NET? dann brauchst du die .NET Runtime auf den anderen Rechner.
@ Andreas W. Ja ich schreibe meine DLL in CLI. Auf dem Rechner meines Kollegen ist die .NET Runtime installiert. Die DLL muss aber auch auf Rechnern laufen ohne die .NET Runtime. Wie mache ich das, wenn ich die DLL trotzdem in CLI programmieren muss?
Also erstens ist das nicht CLI sondern CLR Common Language Runtime und zweitens geht das nicht. Du kannst nicht eine .NET Anwendung auf einem Rechner ohne .NET Framework laufen lassen! Genauso kannst du nicht Java-Code ohne einer Java-Runtime ablaufen lassen! Aber wie kommst du auf .NET? du hast doch gefragt: "wie muss ich eine DLL in VS2005 (C++) programmieren" Ich gehe nicht davon aus, das du managed C++ gemeint hast?!
Also ich habe gedacht Programmierung in VS2005 bedeutet automatisch .NET egal welche Programmiersprache. Deshalb gehe ich davon aus, dass ich in managed C++ programmiert habe.
Nö! Das musst du schon explizit sagen was du willst! Und aussderm ist zwischen C++ und managed C++ ein Unterschied in der Implementierung! (aber das nur nebenbei)
Also mittlerweile funktionert die DLL auch auf anderen Rechner und wie ich es mir gewünscht hatte kann man sie auch in LabView einbinden. Ich musste eigentlich nur auf Release stellen und die DLL mit dem Dependancy Walker durchleuchten um eine fehlende DLL zu erschließen. Vielen Dank für das Feedback
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.