![]() |
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:
bisherige Delphi-Umsetzung
struct Test
{ int iValue; char cName[15]; }; ... Test *pTest; ... CSCWIN_EXT CSCWIN_EXPORT const Test * CSCWIN_API GetTest(void) { ... return pTest; }
Delphi-Quellcode:
Erste Frage: Ist die Umsetzung der Funktion so korrekt?
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; ... 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 |
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; |
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 01: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