Einzelnen Beitrag anzeigen

mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#35

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Apr 2017, 22:13
ganz allgemein: in DLLs gib im WIN-API es keine "void"/"procedure", man verwende besser immer "function" und gebe IMMER mindestens einen "integer" zurück

wenn es unbedingt var sein soll, dann so:
function calcmaindummy( var loesung: PansiChar):integer ; cdecl; external 'qmc_dll_Project1.dll';
extern integer __declspec(dllexport) __stdcall calcmaindummy(char** loesungdummy)

*loesungdummy="irgendwas"; // die Rückgabe MUSS ein konstanter oder globaler statischer Speicherbereich sein, keine lokale Variable, weil die ist weg wenn die Funktion zu Ende!!!
return(0);


oder einfacher:
function calcmaindummy(): PAnsiChar ; cdecl; external 'qmc_dll_Project1.dll';
extern char* __declspec(dllexport) __stdcall calcmaindummy(void)

return("irgendwas"); // die Rückgabe MUSS ein konstanter oder globaler statischer Speicherbereich sein, keine lokale Variable, weil die ist weg wenn die Funktion zu Ende!!!





etwas tricky, aber Delphi seitig sehr sicher:
im DelphiProgramm einen PAnsiChar auf einen ShortString übergeben und den in der C-DLL per "strcpy" füllen

function calcmaindummy(loesung: PansiChar):integer ; cdecl; external 'qmc_dll_Project1.dll';
extern integer __declspec(dllexport) __stdcall calcmaindummy(char* loesungdummy)

strcpy(&loesungdummy[1],"irgendwas");
loesungdummy[0]=strlen(&loesungdummy[1]);
return(0);


delphi:
var loesung:shortstring;

calcmaindummy(@loesung); // blind getippt, aber des sollte nach Gefühl ohne Cast so gehen
  Mit Zitat antworten Zitat