![]() |
Delphi-Version: 5
Parameterübergabe C# dll
Hallo und guten Morgen
Ich möchte folgende c#-Funktion aufrufen:
Code:
In Delphi habe ich die Funktion wie folgt deklariert:
//* CibZugferdSDKIsZugferd *//
//* checks, if a file is a zugferd invoice *// //* *// //* pdfFile: input pdf file *// //* isZugferd: pointer to the output bool value *// //* return value: *// //* 0 = no zugferd xml embedded *// //* 1 = has zugferd xml embedded *// //* < 0 = error, see error codes *// DllExport int WINAPI CibZugferdSDKIsZugferd(const char* pdfFile);
Delphi-Quellcode:
Aufgerufen wird die Funktion wie folgt:
Function CibZugferdSDKIsZugferd(const pdfFile : PChar) : Integer; stdcall; external 'CibZugferdSDK32.dll' name 'CibZugferdSDKIsZugferd';
Delphi-Quellcode:
res ist immer -102, was 'error during reading occured' bedeutet.
inputPdfFile := exePath+'zugferdembedded.pdf'; // strings
if FileExists(inputPdfFile) then begin res := CibZugferdSDKIsZugferd(PChar(inputPdfFile)); end; Ich gehe davon aus, dass in der dll der Filename nicht korrekt ankommt. Wie mach ich's richtig? Gruss, Jörn |
AW: Parameterübergabe C# dll
![]() Zitat:
Es ist übrigens eine C-Style DLL (kein C#). Ich hätte die Funktion auch so definiert. Du kannst ggf. prüfen, ob dein Verdacht richtig ist, indem du anstatt PChar explizit mal die Varianten PWideChar bzw. PAnsiChar probierst. Ggf. findet sich in der Dokumentation auch eine genaue Beschreibung, welcher Art Stringzeiger erwartet wird. |
AW: Parameterübergabe C# dll
Ich sehe schon, der dünne Header gibt dem Entwickler nicht allzu viele Informationen.
Versuche es mal mit der PAnsiChar Variante. Im C# Beispiel "CibZugferdSdk.cs werden die Funktionen ja explizit mit dem CharSet.Ansi importiert.
Code:
public static CibZugferdStatus CibZugferdSDKIsZugferd(string pdfFile)
{ Int32 ret = 0; if (IntPtr.Size == 8) { ret = CibZugferdSDKIsZugferd64(pdfFile); } else { ret = CibZugferdSDKIsZugferd32(pdfFile); } return (CibZugferdStatus) ret; } [DllImport("CibZugferdSDK32.dll", EntryPoint = "CibZugferdSDKIsZugferd", CharSet = CharSet.Ansi)] private static extern Int32 CibZugferdSDKIsZugferd32( string pdfFile ); [DllImport("CibZugferdSDK64.dll", EntryPoint = "CibZugferdSDKIsZugferd", CharSet = CharSet.Ansi)] private static extern Int32 CibZugferdSDKIsZugferd64( string pdfFile ); |
AW: Parameterübergabe C# dll
Danke TiGü
die Doku ist mir bekannt :wink: Mit PAnsiChar funktioniert's jetzt. Gruss, Jörn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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