AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ DLL in Delphi einbinden

Ein Thema von runger · begonnen am 1. Jul 2004 · letzter Beitrag vom 2. Jul 2004
Antwort Antwort
Seite 2 von 2     12   
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#11

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 09:48
Zitat von Muetze1:
Kann es sein, das du Speicher für den PChar alloziieren musst? Stichwort StrAlloc()...
Mit Sicherheit muss man das tun.
Delphi-Quellcode:
var
   otrailer : string;
   tr: TRAB;
   erg : integer;
begin
   // record tr mit Daten füllen
   ....
   // Speicher für otrailer anlegen
   SetLength(otrailer, 1000); // das sollte reichen

   erg := versacom(tr, PChar(otrailer)); // der Aufruf

   // string otrailer verkürzen bis zum 1. Auftreten von #0
   otrailer := PChar(otrailer);

   // Auswertung von erg nicht vergessen !
end;
Andreas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 11:02
Moin!

Ich meine ebend nicht diesen TypeCast, da der bei der Weitergabe an die DLL Probleme machen kann (und bei mir auch meistens macht), daher habe ich nicht umsonst auf StrAlloc() verwiesen. Alloziiere den PChar mit StrAlloc()...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#13

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 11:11
Das Problem liegt ja in der Sache an sich:
- string[0] gibt ja die Länge des Strings und bracuht somit kein Abschlusszeichen
- bei pchar geht der String bis zum Auftreten des Abschlusszeichens
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 12:55
Zitat von Muetze1:
Ich meine ebend nicht diesen TypeCast, da der bei der Weitergabe an die DLL Probleme machen kann (und bei mir auch meistens macht), daher habe ich nicht umsonst auf StrAlloc() verwiesen. Alloziiere den PChar mit StrAlloc()...
StrAlloc gehört zu den backward compatibility routines.
Dagegen ist die Vorgehensweise, die ich vorgeschlagen habe "Delphi-Like".
Es wird mit SetLength dynamisch Speicher reserviert. Denoch braucht sich der
Programmierer nicht um die Freigabe des Speichers zu kümmern.
Man darf bedenkenlos einen Zeiger auf den reservierten String in eine externe Funktion hineingeben und darauf vertrauen, dass die Funktion auf den Zeiger schreiben darf (solange die Länge nicht überschritten wird).
Allerdings hätte ich vielleicht dazu sagen müssen, dass nur AnsiStrings erlaubt sind:
Delphi-Quellcode:
var
   otrailer : AnsiString; // (auch als langer String bezeichnet)
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz