Forum: PC-Programmierung Dll für LabView


von Guest (Gast)


Lesenswert?

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

von Franz (Gast)


Lesenswert?

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);
  }

****************************************

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Christian R. (mrrotzi)


Lesenswert?

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!

von Mr. T (Gast)


Lesenswert?

Danke Leute für die Antworten. Das hilft mir schon mal weiter, bzw. 
bestätigt was ich bis jetzt auch schon herausgefunden habe.

von Mr. T (Gast)


Lesenswert?

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

von Christian R. (mrrotzi)


Lesenswert?

Einfach parallel ins selbe Verzeichnis kopieren.

von Andreas W. (Gast)


Lesenswert?

schreibst du deine DLL vieleicht in C++/CLI? also .NET? dann brauchst du 
die .NET Runtime auf den anderen Rechner.

von Mr. T (Gast)


Lesenswert?

@ 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?

von Christian R. (mrrotzi)


Lesenswert?

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?!

von Mr. T (Gast)


Lesenswert?

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.

von Christian R. (mrrotzi)


Lesenswert?

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)

von Guest (Gast)


Lesenswert?

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

von Christian R. (mrrotzi)


Lesenswert?

gerne ;o)
dafür sind wir ja da!

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
Noch kein Account? Hier anmelden.