www.mikrocontroller.net

Forum: PC-Programmierung Dll für LabView


Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
  }

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Mr. T (Gast)
Datum:

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

Autor: Mr. T (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach parallel ins selbe Verzeichnis kopieren.

Autor: Andreas W. (Gast)
Datum:

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

Autor: Mr. T (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht 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?!

Autor: Mr. T (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gerne ;o)
dafür sind wir ja da!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.