![]() |
Delphi-Version: XE2
Problem mit Rückgabewert einer C++-DLL
Hallo zusammen,
ich importiere eine Funktion aus einer C++-DLL:
Code:
/*
* Get the name associated with the <binIdx>th bin on the specified * printer. If successful, fills in <buf> (up to <bufSize>-1 * characters) and returns <buf>; otherwise, returns NULL. */ LIBFUNC char *pdfGetBinName(char *printerName, int binIdx, char *buf, int bufSize); Das Ganze sieht in meiner Import-Unit folgendermaßen aus:
Delphi-Quellcode:
Wenn ich es aber aufrufe, erhalte ich eine Zugriffsverletzung.
function pdfGetBinName(printerName: PAnsiChar; binIdx: Integer;
var buf: PAnsiChar; var bufSize: Integer): PAnsiChar; cdecl;
Delphi-Quellcode:
Vermutlich sehe ich gerade den Wald vor lauter Bäumen nicht. Mit anderen Funktionen ohne PAnsiChar-Rückgabe klappt es. Woran könnte es liegen?
var
count, i, bufSize: Integer; buf: PAnsiChar; begin pdfGetBinName(PAnsiChar('Druckername'), 0, buf, bufSize); end; Grüße, Jan |
AW: Problem mit Rückgabewert einer C++-DLL
Laut C-Deklaration so:
Delphi-Quellcode:
Und wirklich "cdecl" und nicht "stdcall" wie fast überall in Windows üblich?
function pdfGetBinName(printerName: PAnsiChar; binIdx: Integer; buf: PAnsiChar; bufSize: Integer): PAnsiChar;
cdecl;
Delphi-Quellcode:
const
bufSize = 128; var buf: AnsiString; begin SetLength(buf, bufSize); if pdfGetBinName(PAnsiChar('Druckername'), 0, PAnsiChar(buf), bufSize) <> nil then {...} else {...}; end; |
AW: Problem mit Rückgabewert einer C++-DLL
Tätsachlich. Ich danke vielmals. :)
|
AW: Problem mit Rückgabewert einer C++-DLL
Nur zur Erklärung:
Wichtig wäre hier die Definition von LIBFUNC gewesen. In C/C++ ist es oft üblich die "storage method" einer Funktion über ein #define bedingt zu setzen. So kann dann der gleiche Header sowohl zum Kompilieren der Bibliothek wie auch zum nachherigen Einbinden der (fertigen) Bibliothek benutzt werden. Hier mal ein Beispiel aus dem Lua-Quelltext:
Code:
Das #define LUA_API entspricht hierbei deinem LIBFUNC.
#if defined(LUA_CORE) || defined(LUA_LIB)
#define LUA_API __declspec(dllexport) #else #define LUA_API __declspec(dllimport) #endif |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 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