AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parameterübergabe C# dll

Ein Thema von jsp · begonnen am 24. Mai 2019 · letzter Beitrag vom 24. Mai 2019
Antwort Antwort
jsp

Registriert seit: 9. Aug 2003
50 Beiträge
 
#1

Parameterübergabe C# dll

  Alt 24. Mai 2019, 09:24
Delphi-Version: 5
Hallo und guten Morgen

Ich möchte folgende c#-Funktion aufrufen:

Code:
  //* 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);
In Delphi habe ich die Funktion wie folgt deklariert:
Function CibZugferdSDKIsZugferd(const pdfFile : PChar) : Integer; stdcall; external 'CibZugferdSDK32.dllname 'CibZugferdSDKIsZugferd'; Aufgerufen wird die Funktion wie folgt:
Delphi-Quellcode:
  inputPdfFile := exePath+'zugferdembedded.pdf'; // strings

  if FileExists(inputPdfFile) then
  begin
    res := CibZugferdSDKIsZugferd(PChar(inputPdfFile));
  end;
res ist immer -102, was 'error during reading occured' bedeutet.
Ich gehe davon aus, dass in der dll der Filename nicht korrekt ankommt.

Wie mach ich's richtig?

Gruss, Jörn
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Parameterübergabe C# dll

  Alt 24. Mai 2019, 09:37
https://www.cib.de/fileadmin/media/d..._Anleitung.pdf

Zitat:
2.1 PRÜFEN EINES PDF-DOKUMENTS ALS ZUGFERD-KONFORM
Code:
int CibZugferdSDKIsZugferd(const char* pdfFile);
Die Funktion CibZugferdSDKIsZugferd prüft, ob das angegebene Dokument dem ZUGFeRDStandard entspricht und eine Rechnung mit ZUGFeRD Informationen vorliegt.

Rückgabewerte:
 
ERR_ZUGFERD_OK_HAS_ZUGFERD - Die vorliegende PDF Datei ist ZUGFeRD kompatibel.
ERR_ZUGFERD_OK_NO_ZUGFERD - Die vorliegende PDF Datei ist nicht ZUGFeRD kompatibel.

Wenn es innerhalb des SDK zu einer Fehlersituation gekommen ist, wird ein anderer ERR_ZUGFERD–
Wert zurückgegeben. Die Fehlerwerte und ihre Bedeutung entnehmen Sie der Datei
CibZugferdSDK.h.
Was sagt der angesprochene Header zu -102?
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Parameterübergabe C# dll

  Alt 24. Mai 2019, 09:48
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
            );
  Mit Zitat antworten Zitat
jsp

Registriert seit: 9. Aug 2003
50 Beiträge
 
#4

AW: Parameterübergabe C# dll

  Alt 24. Mai 2019, 09:50
Danke TiGü

die Doku ist mir bekannt

Mit PAnsiChar funktioniert's jetzt.

Gruss, Jörn
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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