INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

VC++ 6.0 DLL ins Labview--Ist es möglich output type as char*?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

05.06.2013, 12:44 (Dieser Beitrag wurde zuletzt bearbeitet: 05.06.2013 12:45 von jg.)
Beitrag #1

Danyang Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Apr 2013

2012
2005
DE



VC++ 6.0 DLL ins Labview--Ist es möglich output type as char*?
Hallo zusammen,
ich habe eine Kombination zwischen Labview und VC++ getestet , da jeder Vorteile hat. Nach dieser Einweisung ( http://www.ni.com/white-paper/3056/en/rating/4 ), habe ich ein DLL Testprogramm geschrieben wie folgendes:

// A_LXC_COM.cpp : Definiert den Einsprungpunkt für die DLL-Anwendung.
//

#include "stdafx.h"
#include <string.h>

//Function declarations
extern "C" __declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char *result);

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

__declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char *result)
{
if (strcoll(s1,s2)==0) result = “+”;
return 0;
}

Von Labview habe ich keine Fehlermeldung bekommen, aber auch kein Ergebnis. Dann habe ich 'Output Type' nach 'int' geändert, funktioniert perfekt.
Nimmt Labview keine Output von string, oder?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.06.2013, 10:44 (Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2013 10:46 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: VC++ 6.0 DLL ins Labview--Ist es möglich output type as char*?
(05.06.2013 12:44 )Danyang schrieb:  Hallo zusammen,
ich habe eine Kombination zwischen Labview und VC++ getestet , da jeder Vorteile hat. Nach dieser Einweisung ( http://www.ni.com/white-paper/3056/en/rating/4 ), habe ich ein DLL Testprogramm geschrieben wie folgendes:

// A_LXC_COM.cpp : Definiert den Einsprungpunkt für die DLL-Anwendung.
//

#include "stdafx.h"
#include <string.h>

//Function declarations
extern "C" __declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char *result);

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

__declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char *result)
{
if (strcoll(s1,s2)==0) result = “+”;
return 0;
}

Von Labview habe ich keine Fehlermeldung bekommen, aber auch kein Ergebnis. Dann habe ich 'Output Type' nach 'int' geändert, funktioniert perfekt.
Nimmt Labview keine Output von string, oder?

Doch, aber Du machst einen grossen Fehler!

Du weist in der Funktion dem char Pointer den Du von LabVIEW aus übergibst einen anderen String Pointer zu. Nur kann dieser Pointer nicht an LabVIEW zurückgegeben werden, da der Pointer selbst By Value übergeben wird.

Aber auch Änderung in:

Code:
__declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char **result)
{
    if (strcoll(s1,s2)==0) *result = “+”;
    return 0;
}

ist zwar korrekt aber macht zumindest in Zusammenhang mit LabVIEW wenig Sinn da Du dann mit Memorypointerakrobatik auf LabVIEW Diagrammebene zu tun bekommst.

Besser ist:

Code:
__declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char *result)
{
    if (strcoll(s1,s2)==0)  strcpy(result, “+”);
    return 0;
}

und noch besser wäre:

Code:
__declspec(dllexport) int __cdecl compare2strings(char *s1, char *s2, char *result, int len)
{
    if (strcoll(s1,s2)==0)  strncpy(result, “+”, len);
    return 0;
}

In beiden Fällen musst Du auf LabVIEW Diagrammebene sicherstellen, das der String für "result" mit minimal 2 Charactern Länge angelegt wird, bevor Du ihn an die Call Library node übergibst.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Type Libary Pfad herausfinden LabDevo_CLD 1 6.265 24.07.2017 10:25
Letzter Beitrag: jg
  Textuelle Ausgabe über DLL in LabView Textbox/Output Effemfour 6 7.202 24.11.2010 13:46
Letzter Beitrag: rolfk
  Pointer auf Char-Array / dll Aufruf ChM 4 9.344 24.08.2010 10:59
Letzter Beitrag: ChM
  Wide Char String toaran_ 10 11.627 26.03.2010 18:23
Letzter Beitrag: rolfk
  Char* in String Array Konvertieren Ralle 3 5.265 12.12.2007 09:54
Letzter Beitrag: Ralle
  struct mit char **Parameter in DLL t4b-1re-2 3 5.201 03.09.2007 12:35
Letzter Beitrag: t4b-1re-2

Gehe zu: