Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: C++ DLL in Delphi unter Linux verwenden

  Alt 22. Jan 2019, 17:46
In C++ ist WideStringParam so deklariert:

Code:
wchar_t* WideStringParm(const std::wstring& strParm)
{
    wchar_t* sp;
    int length = (int)strParm.length();
    if (length == 0)
    {
        sp = NULL;
    }
    else
    {
        wchar_t wordArray[length];
        for (int charX = 0; charX < length; charX++)
        {
            wordArray[charX] = (wchar_t)(strParm[charX]);
        }
        sp = (wchar_t*)FoxitQPLCreateBuffer(instanceID, length * 4);
        FoxitQPLAddToBuffer(instanceID, (char*)sp, (char*)wordArray, length * 4);
    }
    return sp;
}
In der Unit für den Zugriff auf die Windows-Version-DLL ist es so deklariert:

Delphi-Quellcode:
function StringParm(const ParmValue: WideString; var HasNulls: Boolean): PWideChar;
var
  P: Integer;
begin
  HasNulls := False;

  if ParmValue = 'then begin
    Result := nil;
  end else begin
    HasNulls := True;
    P := Length(ParmValue);
    Result := PWideChar(DebenuPDFLibraryCreateBuffer(FInstanceID, P * 2));
    DebenuPDFLibraryAddToBuffer(FInstanceID, Pointer(Result), @ParmValue[1], P * 2);
  end;
end;
Hier fällt natürlich in der Tat auf, dass der Buffer P * 2 ist, in der C++-Variante für die Linux-Version P * 4;

@FritzeW: Kann denn MarshaledA wirklich richtig sein, das ist doch letztlich nur ein Pointer auf Ansistring?

Geändert von Harry Stahl (22. Jan 2019 um 18:59 Uhr)
  Mit Zitat antworten Zitat