Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C Funktion, um zwei Strings zu verbinden in DLL (https://www.delphipraxis.net/75245-c-funktion-um-zwei-strings-zu-verbinden-dll.html)

Luckie 17. Aug 2006 00:11

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Stimmt. Aber er will immer noch nicht:
Code:
EXPORT int addstr(char *str1, char *str2, char *buffer, int lenbuffer)
{   
   if(strlen(str1) + strlen(str2) > lenbuffer)
   {
      return strlen(str1) + strlen(str2);
   }
   else
   {
      strcpy(buffer, str1);  
      strcat(buffer, str2);
      return strlen(buffer);
   }
}
Ich meinte, er scheint es nicht zu mögen, dass ich nil übergebe anstatt einen gültigen Speicherbereich. Zu mindest scheint die AV daraufhinzuweisen:
Zitat:

Access violation at address 10001087 in module 'FirstDLL.dll'. Write of address 00000000.
Ächtz. Ich habe die falsche DLL genommen. Kompiliert hab eich die Debug Version und benutzt die Release Version. :wall:

Allerdings ist der Buffer jetzt leer. Und in ShowMessage sthet nur die Länge.

Dax 17. Aug 2006 00:17

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Geht es so?
Code:
EXPORT int addstr(char *str1, char *str2, char *buffer, int lenbuffer)
{   
   if(strlen(str1) + strlen(str2) >= lenbuffer)
   {
      return strlen(str1) + strlen(str2) + 1;
   }
   else
   {
      strcpy(buffer, str1);  
      strcat(buffer, str2);
      return strlen(buffer);
   }
}

Luckie 17. Aug 2006 00:21

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Nein auch nicht. :gruebel:

Dax 17. Aug 2006 00:26

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Delphi-Quellcode:
type
  TAdd = function(a, b: Integer): Integer; stdcall;
  TAddStr = function(str1, str2: PChar; Buffer: PChar; lenbuffer: Integer): Integer; stdcall;
Ich kann mich irren, aber müsste das nicht in beiden Fällen cdecl sein?

Luckie 17. Aug 2006 00:28

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Nein. Ich habe im es VS auf stdcall gestellt.

Dax 17. Aug 2006 00:31

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Oh, hab ich wohl überlesen :oops:

Aber:
Delphi-Quellcode:
len := AddStr(PChar(str1), PChar(str2), Buffer, sizeof(Buffer));
ShowMessage(string(Buffer) + '[' + IntToStr(len) + ']');
Warum fällt mir das jetzt erst auf :wall:

sizeof(Buffer) => 4

Und: warum Buffer als PChar? Machs doch als string und übergebe @Buffer[1] als Parameter.

Luckie 17. Aug 2006 00:37

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Autsch. Jetzt wo du es sagst. :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall:

Dax 17. Aug 2006 00:39

Re: C Funktion, um zwei Strings zu verbinden in DLL
 
Auf einer 128-Bit-Maschine hätts funktioniert :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz