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?