Home General

RBuilder 14 is not 64-bit compatible at all

edited December 2011 in General
Hello everybody,

I am trying to get it running inside of 64-bit application. I tried to
create a report and immediately caught an access violation. The call stack
is below:

ppDsgner.TppDesignerWindow.SetPageActive($17794230,True,True)
ppDsgner.TppDesignerWindow.CreateControls
ppDsgner.TppDesignerWindow.Create($17794228)
ppEndUsr.TppDesigner.CreateDesignerWindow
ppEndUsr.TppDesigner.GetDesignerWindow
ppEndUsr.TppDesigner.ShowModal

In the function below it happens on the following line:

if ((lDesignModule <> nil) and (lDesignModule.Active = aActive)) then
Exit;

procedure TppDesignerWindow.SetPageActive(aPage: TPage; aActive: Boolean;
var aAllowChange: Boolean);
var
lDesignModule: TppDesignModule;
lEventParams: TppTabChangeEventParams;
begin

aAllowChange := True;

{notify the active design module of the change}
lDesignModule := GetDesignModuleForPage(aPage);

if ((lDesignModule <> nil) and (lDesignModule.Active = aActive)) then
Exit; /// EXCEPTION !!!! ////

It looks like the GetDesignModuleForPage returns an invalid object
reference. So I went to GetDesignModuleForPage. Looks correct. Then I tried
to find how the Tag value is assigned.

procedure TppDesignerWindow.CreateDesignModules;
var
...
lPage : TPage;
lDesignModule: TppDesignModule;
...
begin
...
lPage.Tag := LongInt(lDesignModule); //// WHOA !!! lPage.Tag is
NativeInt (8 bytes) while LongInt is 4 bytes long.

I fixed this code to NativeInt but immediately run into a series of other
errors. Just look at this:

class function TraTppPrintableRTTI.GetPropValue(aObject: TObject; const
aPropName: String; var aValue): Boolean;
begin
Result := True;
....
else if (CompareText(aPropName, 'DataPipeline') = 0) then
Integer(aValue) := Integer(TppPrintable(aObject).DataPipeline)
...
else if (CompareText(aPropName, 'DrawComponent') = 0) then
Integer(aValue) := Ord(TppPrintable(aObject).DrawComponent)
else if (CompareText(aPropName, 'Font') = 0) then
Integer(aValue) := Integer(TppPrintable(aObject).Font) //// INTEGER is
32 bit while TFont is 64 bit.
...
else if (CompareText(aPropName, 'LookupPipeline') = 0) then
Integer(aValue) := Ord(TppPrintable(aObject).LookupPipeline)

etc, etc, etc. They're everywhere :(

Any news on update?

Comments

  • edited December 2011

    This will be fixed for RB 14.02. Thanks for the feedback. I think during
    development of RB 14 some mods that were done a temp VM got lost. My fault.

    -
    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
  • edited December 2011
    "Nard Moseley (Digital Metaphors)" wrote in message
This discussion has been closed.