Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   c dll, Funktion mit Pointer als Rückgabetyp nutzen (https://www.delphipraxis.net/91659-c-dll-funktion-mit-pointer-als-rueckgabetyp-nutzen.html)

Rifmetroid 8. Mai 2007 11:29


c dll, Funktion mit Pointer als Rückgabetyp nutzen
 
Moin moin,

ich bin neu hier und muss sagen, mir gefällt das Forum sehr gut. Ich konnte bis jetzt schon sehr viele Dinge selbst in Erfahrung bringen. Jetzt bin ich jedoch auf ein Problem gestoßen, bei dem ich nicht weiterkomme und auch nichts passendes im Forum gefunden habe.

Ich habe eine DLL, welche in C geschrieben ist. Darin gibt es eine Funtkion, die ich statisch in mein Delphiprogramm einbinden möchte. Das Problem besteht nun darin, dass diese Funktion als Rückgabetyp einen Pointer auf eine Struktur darstellt und ich nicht weiß, wie ich das in Delphi abbilden soll. Dazu hier mal ein wenig Quellcode, den ich bis jetzt habe:

Auszug aus der C++ DLL
Code:
struct Test
{
   int iValue;
   char cName[15];
};

...

Test *pTest;

...

CSCWIN_EXT CSCWIN_EXPORT const Test * CSCWIN_API GetTest(void)
{
    ...
    return pTest;
}
bisherige Delphi-Umsetzung
Delphi-Quellcode:
type TTest = record
     iValue: integer;
     cName:      array[0..14] of char;
     end;
  P_Test = ^TTest;

...

function GetTest():P_Test; stdcall; external 'Test.dll';

...

test : TTest;

...
Erste Frage: Ist die Umsetzung der Funktion so korrekt?

Dann meine zweite Frage: Wie rufe ich die Funktion nun auf, so dass ich den Rückgabepointer meinem Delphi-Pointer zuweisen kann?

Vielen Dank schon mal im Voraus!

Gruß

Christian

Robert Marquardt 8. Mai 2007 11:37

Re: c dll, Funktion mit Pointer als Rückgabetyp nutzen
 
Die Umsetzung ist korrekt bis auf die ungeklaerte Frage des Structure Packing. PTest statt P_Test als Name fuer den Pointertyp ist besser.
Aufruf:
Delphi-Quellcode:
var
  TestP: PTest;
begin
  TestP := GetTest;
  ShowMessageFmt('iValue=%d cName=%s', [TestP^.iValue, TestP^.cName]);
end;

Rifmetroid 8. Mai 2007 11:43

Re: c dll, Funktion mit Pointer als Rückgabetyp nutzen
 
Besten Dank!
Jetzt funktioniert es endlich!!

Du hast mir den Tag gerettet!

Gruß

Christian


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