Hi Stefan!
Ich stand vor gut 3Monaten vor dem gleichen Problem, nur das ich die Dll nicht in CVI schreiben wollte. Aber in C/C++ geht es, unter beachtung kleinerer Sachen recht einfach.
Ich weiß ja nicht, was du für Arrays übergeben willst, aber ich mach es immer so, dass ich die einzelnen Variablen als Pointer To Value übergebe und die Strings als U8-Array (unsigned char*).
Somit kannst du dein headerfile(z.B: dll.h) so beginnen:
#include …
extern „C“{
int __declspec(dllexport) __stdcall Funktion(char*, int*);
}
Dein Sourcecode wäre dann, insofern du deiner dll einen Text erzeugst:
#include „dll.h“
BOOL __stdcall DllMain( HANDLE H_Module,
DWORD DW_ReasFCall,
LPVOID LP_Reserved
)
{
switch(DW_ReasFCall)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
int __declspec(dllexport) __stdcall Funktion(char* Buffer, int* Zahl)
{
// Zahl kannst einfach beschreiben:
*Zahl = 5;
//String übergabe machste am besten über memcpy
std::string String;
String.append(„Hallo“);
memcpy(Buffer, String.data(), String.length());
return 0;
}
Die Funktion bindeste einfach über das CallLibraryFunction.vi ein, und dann sollte das funzen. Du musst aber aufpassen, dass du aus LabVIEW genug Speicher allokierst. Dass heißt, du darfst dein U8-Array nicht mit Länge Null initialisieren, dann hagelts Exceptions.
Na denn. Ich hoffe es hilft.
Stefan.