Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Invalid Pointer Operation. (https://www.delphipraxis.net/35981-invalid-pointer-operation.html)

freak4fun 14. Dez 2004 13:27


Invalid Pointer Operation.
 
Hallo,
worauf weißt mich die Meldung: "Invalid Pointer Operation." hin?

Ich hab folgendes versucht:
Delphi-Quellcode:
interface

function Funktion(Name: String): String; stdcall;

implemantation

function Funktion(Name: String): String; stdcall; external 'DLL.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := Funktion(Edit2.Text);
end;
In der DLL.dll
Delphi-Quellcode:
function Funktion(Name: String): String; stdcall;
var
  Zeichenkette: String;
begin
  Result := Zeichenkette;
end;
export
  Funktion;
Also die Zeichenkette ist richtig und wird auch ausgegeben. Ich erhalte halt nur noch die Fehlermeldung. Auf den Service möchte ich aber verzichtn. :zwinker:

Ich bin dankbar für jeden Ansatz und jegliche Lösungsvorschläge.

mfg
freak

Luckie 14. Dez 2004 13:30

Re: Invalid Pointer Operation.
 
Hast du den Kommentar gelesen, den dir der DLL-Experte als erstes oben in die Unit schreibt:
Delphi-Quellcode:
library Project2;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }


uses
  SysUtils,
  Classes;

{$R *.res}

begin
end.

freak4fun 14. Dez 2004 13:39

Re: Invalid Pointer Operation.
 
Entschuldigung, Luckie. :roll:
Ich muss die englische Version von Delphi nutzen und kann doch Englisch nicht so gut. Ich hab auch nicht gewusst das es da drin steht. Danke für den Hinweis. Ich hoffe nächstmal denk ich dran. (Meine Merkbefreiung ist noch in der Antragstellungsphase :mrgreen: )

mfg
freak

Sprint 14. Dez 2004 13:48

Re: Invalid Pointer Operation.
 
Versuche mal folgendes...

Delphi-Quellcode:
library MyLib;

function MyFunction(const S: WideString): WideString; safecall;
begin
  {...}
  Result := MyString;
  {...}
end;

exports
  MyFunction;

begin
end.
Delphi-Quellcode:
function MyFunction(const S: WideString): WideString; safecall;

implementation

function MyFunction; external 'MyLib.dll';
Konnte bis jetzt noch keine Probleme mit WideString und safecall feststellen.

SirThornberry 14. Dez 2004 13:52

Re: Invalid Pointer Operation.
 
ob safecall oder stdcall sollte keinen Unterschied machen da so ziemlich das gleiche passiert. einziger Unterschied:
Zitat:

The safecall convention implements exception "firewalls." On Windows, this implements interprocess COM error notification.

Sprint 14. Dez 2004 14:00

Re: Invalid Pointer Operation.
 
Zitat:

Zitat von SirThornberry
ob safecall oder stdcall sollte keinen Unterschied machen da so ziemlich das gleiche passiert.

Ja, ich weiß.

In ActiveX DLL's benutzt Delphi zum exportieren von Strings, safecall und WideString. Weil dort diese Kombination fehlerfrei funktioniert, würde ich das auch in einer Standard-DLL machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.

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