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