Also das "gefällt" mir gar nicht mit deinem PWideChar als Rückgabewert.
Das ist nicht sicher und auch nicht Scriptfähig.
Also, was du braucht ist ein sogenanntes
Duales Interface.
Es zeichnet sich dadurch aus, dass es von
IDispatch abgeleitet ist und man daher nur bestimmte (sichere) Datentypen verwenden darf.
Ausserdem werden Exceptions, die in deiner
DLL entstehen automatisch aufgefangen und korrekt an den Aufrufer weitergeleitet.
Hier ein Beispiel.
Man erkennt
1.) ITest ist abgeleitet von IDispatch
2.) safecall Aufrufkonvention (wichtig für
Exception Weiterleitung)
3.) Zusätzliches dispinterface - um den Zugriff über das IDispatch-Interface zu beschleunigen
Delphi-Quellcode:
// *********************************************************************//
// Schnittstelle: ITest
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {03D4B87D-FB7A-4632-831C-6318AE294C42}
// *********************************************************************//
ITest =
interface(IDispatch)
['
{03D4B87D-FB7A-4632-831C-6318AE294C42}']
function CountStringLength(
const Value: WideString): Integer;
safecall;
function ReverseStr(
const Value: WideString): WideString;
safecall;
end;
// *********************************************************************//
// DispIntf: ITestDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {03D4B87D-FB7A-4632-831C-6318AE294C42}
// *********************************************************************//
ITestDisp =
dispinterface
['
{03D4B87D-FB7A-4632-831C-6318AE294C42}']
function CountStringLength(
const Value: WideString): Integer;
dispid 2;
function ReverseStr(
const Value: WideString): WideString;
dispid 3;
end;