Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PChar an DLL übergeben (https://www.delphipraxis.net/177798-pchar-dll-uebergeben.html)

Mossi 28. Nov 2013 07:10

Delphi-Version: 7

PChar an DLL übergeben
 
Ich hab im moment ein ganz simples Problem, das ich eigentlich schon öfter gemacht habe, aber irgendwie finde ich aktuell die Lösung nicht.
ich habe eine DLL mit einer procedure stdcall. An diese procedure übergebe ich zwei PChar. Es kommt da aber nur Unsinn an. wenn ich stdcall weglasse, dann passt es. Da ich aber von anderen Sprachen darauf zugreifen möchte, bräuchte ich eigentlich stdcall.
Vermutlich handelt es sich um einen dummen Leichtsinnsfehler, aber ich sitz gerade voll auf'm Schlauch.

Quellcode der DLL:
Delphi-Quellcode:
library DelphiDll;

uses
  SysUtils,
  Classes;

{$R *.res}

procedure TestMethod(value1: PChar; value2: PChar); stdcall;
begin

end;

exports
  TestMethod;

end.
Quellcode des aufrufenden Programms:
Delphi-Quellcode:
program DelphiDllTest;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

type
  TTestMethod = procedure(value1: PChar; value2: PChar);

var
  lib: Cardinal;
  method: TTestMethod;
begin
  lib := LoadLibrary(PChar('DelphiDll.dll'));
  if lib <> 0 then
  begin
    @method := GetProcAddress(lib, PChar('TestMethod'));
    if Assigned(method) then
      method(PChar('test1'), PChar('test2'));
  end;
end.

DeddyH 28. Nov 2013 07:12

AW: PChar an DLL übergeben
 
Du musst das stdcall schon auf beiden Seiten angeben, also auch in der Anwendung bei der Typdefinition.

Mossi 28. Nov 2013 07:29

AW: PChar an DLL übergeben
 
Ich wusste, dass es ein Leichtsinnsfehler ist... Vielen Dank

himitsu 28. Nov 2013 11:20

AW: PChar an DLL übergeben
 
Oder anders gesagt: Auf beiden Seiten müssen die Definitionen übereinstimmen.
> Also könnte man das stdcall auch auf beiden Seiten weglassen, oder eine andere Aufrufkonvention verwenden.



ABER noch was zum PChar:

Verwende niemals dynamische Typen für Exportfunktionen :!: (Daten speichern, übertragen, oder sonstwie an unabhängige Module übergeben)
> http://www.delphipraxis.net/1237635-post6.html

siehe
htttp://www.delphipraxis.net/177787-unicode-problem.html
http://www.delphipraxis.net/177737-s...nzt-nicht.html
und massig weitere Threads


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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