|
@@ -377,8 +377,12 @@ uses
|
|
{$ENDIF FPC_DOTTEDUNITS}
|
|
{$ENDIF FPC_DOTTEDUNITS}
|
|
|
|
|
|
{$IFDEF MSWINDOWS}
|
|
{$IFDEF MSWINDOWS}
|
|
-procedure SysFreeString(bstr:pointer); stdcall; external 'oleaut32.dll' name 'SysFreeString';
|
|
|
|
-{$ENDIF}
|
|
|
|
|
|
+ {$IFNDEF WIN16}
|
|
|
|
+ { i8086-win16 system define MSWINDOWS macro but does not support OLE strings }
|
|
|
|
+ procedure SysFreeString(bstr:pointer); stdcall; external 'oleaut32.dll' name 'SysFreeString';
|
|
|
|
+ {$DEFINE USE_MSWINDOWS_OLE}
|
|
|
|
+ {$ENDIF not WIN16}
|
|
|
|
+{$ENDIF MSWINDOWS}
|
|
|
|
|
|
var
|
|
var
|
|
customvarianttypes : array of TCustomVariantType;
|
|
customvarianttypes : array of TCustomVariantType;
|
|
@@ -4107,7 +4111,7 @@ var
|
|
arg_data: PVarData;
|
|
arg_data: PVarData;
|
|
dummy_data: TVarData;
|
|
dummy_data: TVarData;
|
|
arg_advanced: boolean;
|
|
arg_advanced: boolean;
|
|
-{$IFDEF MSWINDOWS}
|
|
|
|
|
|
+{$IFDEF USE_MSWINDOWS_OLE}
|
|
i : integer;
|
|
i : integer;
|
|
nextstring: integer;
|
|
nextstring: integer;
|
|
StringMap : array[0..255] of record passtr : pansistring; paswstr : punicodestring; comstr : pwidechar; end;
|
|
StringMap : array[0..255] of record passtr : pansistring; paswstr : punicodestring; comstr : pwidechar; end;
|
|
@@ -4119,7 +4123,7 @@ begin
|
|
arg_count := CallDesc^.ArgCount;
|
|
arg_count := CallDesc^.ArgCount;
|
|
method_name := ansistring(PAnsiChar(@CallDesc^.ArgTypes[arg_count]));
|
|
method_name := ansistring(PAnsiChar(@CallDesc^.ArgTypes[arg_count]));
|
|
setLength(args, arg_count);
|
|
setLength(args, arg_count);
|
|
- {$IFDEF MSWINDOWS}
|
|
|
|
|
|
+ {$IFDEF USE_MSWINDOWS_OLE}
|
|
nextstring:=0;
|
|
nextstring:=0;
|
|
try
|
|
try
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
@@ -4139,7 +4143,7 @@ begin
|
|
end;
|
|
end;
|
|
if arg_byref then
|
|
if arg_byref then
|
|
begin
|
|
begin
|
|
- {$IFDEF MSWINDOWS}
|
|
|
|
|
|
+ {$IFDEF USE_MSWINDOWS_OLE}
|
|
case arg_type of
|
|
case arg_type of
|
|
varStrArg: begin
|
|
varStrArg: begin
|
|
StringMap[NextString].ComStr:=StringToOleStr(PAnsiString(ppointer(arg_ptr)^)^);
|
|
StringMap[NextString].ComStr:=StringToOleStr(PAnsiString(ppointer(arg_ptr)^)^);
|
|
@@ -4205,7 +4209,7 @@ begin
|
|
arg_data^.vByte := PLongint(arg_ptr)^;
|
|
arg_data^.vByte := PLongint(arg_ptr)^;
|
|
varWord:
|
|
varWord:
|
|
arg_data^.vWord := PLongint(arg_ptr)^;
|
|
arg_data^.vWord := PLongint(arg_ptr)^;
|
|
-{$IFDEF MSWINDOWS}
|
|
|
|
|
|
+{$IFDEF USE_MSWINDOWS_OLE}
|
|
varStrArg: begin
|
|
varStrArg: begin
|
|
StringMap[NextString].ComStr:=StringToOleStr(PAnsiString(arg_ptr)^);
|
|
StringMap[NextString].ComStr:=StringToOleStr(PAnsiString(arg_ptr)^);
|
|
StringMap[NextString].PasStr:=nil;
|
|
StringMap[NextString].PasStr:=nil;
|
|
@@ -4281,7 +4285,7 @@ begin
|
|
else
|
|
else
|
|
RaiseDispError;
|
|
RaiseDispError;
|
|
end;
|
|
end;
|
|
- {$IFDEF MSWINDOWS}
|
|
|
|
|
|
+ {$IFDEF USE_MSWINDOWS_OLE}
|
|
{ translate strings back }
|
|
{ translate strings back }
|
|
for i:=0 to NextString-1 do begin
|
|
for i:=0 to NextString-1 do begin
|
|
if assigned(StringMap[i].passtr) then
|
|
if assigned(StringMap[i].passtr) then
|