Autor Beitrag
Mikro79
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 15.02.11 12:01 
Moin moin,

ich habe ein Problem mit meiner Delphi-DLL (MyDLL.DLL).

Ich rufe aus einer C-Applikation (um genau zu sein aus einer Visualisierung (Script in C)) eine DLL-Funktion meiner in Delphi 2010 erstellten DLL auf.
Dieser Funktion übergebe ich drei "strings" in Form von char* und einige integer.

Der Aufruf (WinCC) sieht folgendermaßen aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
#pragma code ("MyDLL.DLL");
  int  MyFunction (char * pString1, char *pString2, char *pString3, int nType, int nMode, int nFlag, int nReserve);
#pragma code();       // hiermit wird die Funktion aus der DLL deklariert

char szString1[100];
char szString2[100];
char szString3[10];

strcpy (szString1, "teststring1");
strcpy (szString2, "teststring2");
strcpy (szString3, "test3");
  
MyFunction (szString1, szString2, szString3, 1 ,0, 0, 0);   // Aufruf der Funktion aus der DLL



Ausschnitt aus der DLL:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function MyFunction  (pString1 : pAnsiChar; pString2 : pAnsiChar; pString3 : pAnsiChar; nType : integer; nMode, nFlag, nReserve : integer): integer;
var
  strString1: string;
  strString2: string;
  strString3: string;
begin
...
...
  strString1 := String(AnsiString(PAnsiChar(pString1)));
  strString2 := String(AnsiString(PAnsiChar(pString2)));
  strString3 := String(AnsiString(PAnsiChar(pString3)));
...
...


In den strings steht nun leider nüscht drin.
Was mache ich hier falsch??? Habe das Gefühl ich hab n Brett vorm Kopp und dass die Lösung nahe liegt...
Vielleicht kann ja einer das Brett entfernen, wäre sehr dankbar.

Gruß, Mikro79


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 15.02.2011 um 17:14
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 15.02.11 12:26 
Du hast das stdcall in deiner DLL hinter der Funktionsdeklaration vergessen. ;-)