FAQ
Rodrigo Ruz edited this page Mar 16, 2015
·
1 revision
Q: Why the types int64, cardinal and word are redeclared for FPC?
A: In the interface part of the units generated by the application you can see these lines
{$IFDEF FPC}
Cardinal=Longint;
Int64=Integer;
Word=Longint;
{$ENDIF}
this is necessary (for the moment) because these types are not automatables in FPC, so cannot be used as parameters in a late-binding method call.
check this sample
the Create function for the TWin32_Share class is declarated like this
function Create(const Access : OleVariant;const Description : String;const MaximumAllowed : Cardinal;const Name : String;const Password : String;const Path : String;const {$IFDEF OLD_DELPHI}_Type{$ELSE}&Type{$ENDIF} : Cardinal): Integer;overload;
and implemented in this way
function TWin32_Share.Create(const Access : OleVariant;const Description : String;const MaximumAllowed : Cardinal;const Name : String;const Password : String;const Path : String;const {$IFDEF OLD_DELPHI}_Type{$ELSE}&Type{$ENDIF} : Cardinal): Integer;
var
objInParams : OleVariant;
objOutParams : OleVariant;
begin
objInParams := GetInstanceOf.Methods_.Item('Create').InParameters.SpawnInstance_();
objInParams.Properties_.Item('Access').Value := Access;
objInParams.Properties_.Item('Description').Value := Description;
objInParams.Properties_.Item('MaximumAllowed').Value := MaximumAllowed;
objInParams.Properties_.Item('Name').Value := Name;
objInParams.Properties_.Item('Password').Value := Password;
objInParams.Properties_.Item('Path').Value := Path;
objInParams.Properties_.Item('Type').Value := {$IFDEF OLD_DELPHI}_Type{$ELSE}&Type{$ENDIF};
objOutParams := WMIService.ExecMethod(WmiClass, 'Create', objInParams, 0, GetNullValue);
Result := VarIntegerNull(objOutParams.ReturnValue);
end;
this code is not directly compilable under FPC because the parameters MaximumAllowed and _Type
are Cardinal, and this type is not automatable.
As workaround the application must be use another similar and automatable type like LongInt type.
I am currently working on another workaround to avoid these redeclaration.