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 

Dieses Thema hat akzeptierte Lösungen:

DLL einbinden - String



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!

04.05.2015, 11:30 (Dieser Beitrag wurde zuletzt bearbeitet: 04.05.2015 11:33 von Lars_Tragl.)
Beitrag #1

Lars_Tragl Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Apr 2014

2012
2014
DE



DLL einbinden - String
Hey,

ich versuche gerade eine DLL in LabVIEW einzubinden. Die DLL selbst ist in C++ geschrieben (Borland C++ Builder). Zu Testzwecken wollte ich mir meine bisherigen Ergebnisse ausgeben lassen. Allerdings habe ich hierbei Probleme mir den String ausgeben zu lassen. Die DLL gibt jedesmal den Fehler 1097 zurück. Die Zahlenwerte kriege ich zurück. Lediglich beim String harkt es.
Meine Frage ist jetzt, sind Strings in C / C++ kompatibel zu Strings in LabVIEW ? oder wo liegt mein Problem?

Vielen Dank für die Hilfe

hier mein DLL Einstiegspunkt:
//---------------------------------------------------------------------------



#include <vcl.h>
#include <windows.h>
#include "Wrapper.hpp"

#pragma hdrstop

#define DLLEXPORT __declspec(dllexport)

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//--------------------------------------------------------------------------------


// The extern "C" declaration allows mixed languages compactability,
// it prevents the C++ compiler from using decorated (modified)
// names for the functions
extern "C"

{
DLLEXPORT int getErrorCode_LabVIEW();
DLLEXPORT string getErrorString_LabVIEW();
DLLEXPORT unsigned int selectProtocol_LabVIEW(unsigned int);
DLLEXPORT unsigned int getResult_LabVIEW();
DLLEXPORT unsigned int getAnswer_LabVIEW();

DLLEXPORT int getErrorCode_Labview()
{
Wrapper wrapper;
return wrapper.getErrorCode();
}

DLLEXPORT string getErrorString_LabVIEW()
{
Wrapper wrapper;
return wrapper.getErrorString();
}

DLLEXPORT unsigned int selectProtocol_LabVIEW(unsigned int protocol)
{
Wrapper wrapper;
return wrapper.selectProtocol(protocol);
}

DLLEXPORT unsigned int getResult_LabVIEW()
{
Wrapper wrapper;
return wrapper.getResult();
}

DLLEXPORT unsigned int getAnswer_LabVIEW()
{
Wrapper wrapper;
return wrapper.getAnswer();
}
}

sowie die Wrapper.cpp :

#include "Wrapper.hpp"


/**
* returns errorcode
*/
int Wrapper::getErrorCode(){

return 5;
}

/**
* returns errormessage
*/
string Wrapper::getErrorString(){

return "hello";
}



unsigned int Wrapper::selectProtocol(unsigned int protocol){

return protocol;
}


unsigned int Wrapper::getResult(){

return 77;
}


unsigned int Wrapper::getAnswer(){
return 55;
}


Angehängte Datei(en)
12.0 .vi  Wrapper_Test.vi (Größe: 13,55 KB / Downloads: 263)

2.0 .dll  IEC60870_DLL.dll (Größe: 10 KB / Downloads: 283)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.05.2015, 19:24 (Dieser Beitrag wurde zuletzt bearbeitet: 04.05.2015 19:26 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL einbinden - String

Akzeptierte Lösung

(04.05.2015 11:30 )Lars_Tragl schrieb:  Hey,

ich versuche gerade eine DLL in LabVIEW einzubinden. Die DLL selbst ist in C++ geschrieben (Borland C++ Builder). Zu Testzwecken wollte ich mir meine bisherigen Ergebnisse ausgeben lassen. Allerdings habe ich hierbei Probleme mir den String ausgeben zu lassen. Die DLL gibt jedesmal den Fehler 1097 zurück. Die Zahlenwerte kriege ich zurück. Lediglich beim String harkt es.
Meine Frage ist jetzt, sind Strings in C / C++ kompatibel zu Strings in LabVIEW ? oder wo liegt mein Problem?

Vielen Dank für die Hilfe

hier mein DLL Einstiegspunkt:
//---------------------------------------------------------------------------



#include <vcl.h>
#include <windows.h>
#include "Wrapper.hpp"

#pragma hdrstop

#define DLLEXPORT __declspec(dllexport)

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//--------------------------------------------------------------------------------


// The extern "C" declaration allows mixed languages compactability,
// it prevents the C++ compiler from using decorated (modified)
// names for the functions
extern "C"

{
DLLEXPORT int getErrorCode_LabVIEW();
DLLEXPORT string getErrorString_LabVIEW();
DLLEXPORT unsigned int selectProtocol_LabVIEW(unsigned int);
DLLEXPORT unsigned int getResult_LabVIEW();
DLLEXPORT unsigned int getAnswer_LabVIEW();

DLLEXPORT int getErrorCode_Labview()
{
Wrapper wrapper;
return wrapper.getErrorCode();
}

DLLEXPORT string getErrorString_LabVIEW()
{
Wrapper wrapper;
return wrapper.getErrorString();
}

DLLEXPORT unsigned int selectProtocol_LabVIEW(unsigned int protocol)
{
Wrapper wrapper;
return wrapper.selectProtocol(protocol);
}

DLLEXPORT unsigned int getResult_LabVIEW()
{
Wrapper wrapper;
return wrapper.getResult();
}

DLLEXPORT unsigned int getAnswer_LabVIEW()
{
Wrapper wrapper;
return wrapper.getAnswer();
}
}

sowie die Wrapper.cpp :

#include "Wrapper.hpp"


/**
* returns errorcode
*/
int Wrapper::getErrorCode(){

return 5;
}

/**
* returns errormessage
*/
string Wrapper::getErrorString(){

return "hello";
}



unsigned int Wrapper::selectProtocol(unsigned int protocol){

return protocol;
}


unsigned int Wrapper::getResult(){

return 77;
}


unsigned int Wrapper::getAnswer(){
return 55;
}

string ist ein C++ template Datentyp. Diese Dinger sind nicht nur nicht kompatibel mit nicht C++ Applikationen (also auch C) sondern auch mit C++ Applikationen die mit verschiedenen C++ Compilern kompiliert wurden (und regelmässig sogar mit Binaries von verschiedenen Versionen des selben C++ Compilers). LabVIEW kann ganz sicher nichts damit tun (und Delphi, VB, VC, .Net usw.)

Also mache da mal einen richtigen LPSTR (char*) von dann gehts!

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
05.05.2015, 07:18
Beitrag #3

Lars_Tragl Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Apr 2014

2012
2014
DE



RE: DLL einbinden - String
vielen vielen Dank !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: