Jump to content

Sue King

Members
  • Content Count

    53
  • Joined

  • Last visited

Posts posted by Sue King


  1. I've asked on the Nexus forum about this, posting this call stack from the debugger.

     

    gnugettext.TGnuGettextInstance.LoadResString($676444)
    gnugettext.LoadResStringW($676444)
    nxllUtils.nxRaiseLastOSError(True,0)
    nxtwWinsockTransport.TnxWinsockClientConnection.DoRecv((no value),32)
    nxtwWinsockTransport.TnxWinsockClientConnection.Read((nxptBasePooledTransport.TnxBasePooledTransport.btMessageReceived,$7E790030))
    nxptBasePooledTransport.TnxBaseCallbackThread.InnerExecute
    nxllThread.TnxInternalInitThread.DoExecute
    nxllThread.TnxThread.Execute
    nxptBasePooledTransport.TnxBaseCallbackThread.Execute
    :0047a030 ThreadProc + $4C
    :00409e7e ThreadWrapper + $2A
    :76d1fe09 KERNEL32.BaseThreadInitThunk + 0x19
    :77d0662d ntdll.RtlGetAppContainerNamedObjectPath + 0xed
    :77d065fd ntdll.RtlGetAppContainerNamedObjectPath + 0xbd

     

    This sequence is repeated for each time through the endless loop.  The translated text first time through is '[unknown]'.  If I don't actually

     

    The suggestion was that maybe there is something in LoadResString that causes issues when called in the context of a different thread.  The Nexus code I'm trying to use has multiple threads involved so maybe there is a race condition somewhere.

    • Thanks 1

  2. I've spent some hours in the debugger trying to see what is going on.  Unfortunately the Nexus code is multi-threaded and it makes it hard to follow what is going on.

     

    Before I go back to them, I've played around with the code inTGnuGettextInstance.dgettext.  It seems as though calling utf8encode, and then utf8decode can trigger the looping, but it may be that something is happening that I don't understand.

     

    That is, changing to code to add

     

    var

      lResult: UnicodeString;

      lUTF8String: UTF8String;

    begin

      ...

      end else begin

        lUTF8String := utf8encode(szMsgId);

        lResult := UTF8Decode(lUTF8String);

      Result := szMsgId;

    ...

     

    causes the loops.  While running, if I jump over the utf8decode in the debugger (4 times), it then completes.  If utf8decode is not called it works fine.

     

    I noticed that while it is looping, the message is [unknown].  When I skip the utf8decode with the debugger, it shows [Operation aborted] the first 2 times through, and then '[unknown]' the next 2 times, and then doesn't need to call it again as it has completed whatever it is doing successfully.

     

    If this doesn't give you any clues, then I'll talk to Nexus.  I wanted to do all I could before raising it with them.  At the moment, I've think I reached the end of my knowledge with trying to debug this.  The call stack in the debugger doesn't appear helpful.

     

    Thanks for looking at this.

     

     

     

     

    • Thanks 1

  3. Thanks for the explanation about why the changed test isn't a fix.

     

    From what I can see in the debugger, it is not an error in finalization - the process is not being terminated when the error occurs.

     

    The loop involves repeatedly calling ResourceStringGettext.

     

    The test app has a class that uses a winsock.  Something is happening when the winsock is closed that causes a loop, possibly an exception getting a string.  The workarounds I've tried mean I can open and close the socket multiple times in the app.  Without it, the app hangs on the first close.

     

    This version does not help.


  4. Nexus does not hook that function.  I have checked with the Nexus team.

     

    I have found a work around in gnugettext.pas.  In TGnuGettextInstance.ResourceStringGettext add a test for refcount = 0 so that it starts with

     

    if (MsgId='') or (ResourceStringDomainListCS=nil) or (ResourceStringDomainListCS.RefCount=0) then begin

      Result := MsgId;

      exit;

    end;

     

    • Thanks 1

  5. A bit more information.   The test app I was using was a sample demo from Nexus that I'd modified to test some units I'd written.  To eliminate my code, I went back to the original demo.  The problem still occurs, but it may have shed more light on what is happening.

     

    In gnugettext.pas, I enabled the HookLoadResString and changed  TGnuGettextInstance.LoadResString  to

    Result := 'fred';

    This resulted in the app closing properly.

     

    Result := ResourceStringGettext('fred');

    Resulted in the problem.

     

    Putting in some outputdebugstrings, it appears that it is going into a loop calling LoadResStringW.  Looking at the Nexus code in the debugger I think at this stage it might be raising a silent exception which is calling LoadResStringW and maybe that is generating an exception somewhere and it is going into a never-ending loop.  More time in debugging may pin it down a bit more.

     

    Unfortunately my day was unexpectedly interrupted and I haven't been able to do more than this.  I may not have more time until mid-next week to do much on it.  Things will be a bit unpredicable for the next few days, but if there is anything you can suggest for me to do, I'll do my best to find the time as I'd like to get to the bottom of it.

     

    Sue

     

     

     

     

     


  6. I haven't done any more on it.  I thought I would leave it for a bit and come back to it.

     

    I can use the latest version providing I disable

    HookLoadResString.Enable;

     

    I'll have another look today.  This is the first time I've needed to look at hooking, so it is new territory for me.

     

    The actual code looks OK, but something must be going on that isn't.


  7. Although I have the mobile platforms now, it isn't available for some projects that have been updated.  I thought about submitting a case about it, but there are other similar cases listed and I can't wait for a fix, so I'll recreate the .proj files and sort it out that way.

    I've also found that I can't use IDEFixPack or install ProjectMagician, so there is something odd about the installation.  It was installed into a new VM, so there are no upgrade issues.

    However I am able to move on to new work so that is good.  Apart from the way the IDE jumps around the screen, I like working with Rio.

    That path problem is has been around for years.   Pity they can't do something about it.

     

    I'm not sure I actually helped with the problem, but I do find it encouraging when I have problems and people have suggestions and comments.

     

    Cheers,

    Sue

     

     


  8. It does not appear in either place.

    It is Add/Remove programs under Windows, but the IDE doesn't know a thing about it.

    It also doesn't appear in the GExperts Expert Manager.  I'm not sure if it should.

     

    I've just had to re-install Rad Studio as the web installer didn't add platforms properly.  This was an ISO install.  I tried to install it before re-installing from the ISO and it didn't appear then either.  I just thought it was something weird in the web setup.  It appears to be something weird in my setup.

     

    I was hoping to use it to add Platforms to projects that have been upgraded from Berlin.  I guess I'm just going to have to recreate the projects.

     

    Thanks anyway.


  9. Hi Curt,

     

    What exactly is your symptom ?  Can you create a new project for mobile ?  I've found that projects from Berlin, which I'm upgrading to Rio, can't add Platforms.  Project Magician from Uwe Raabe should all Add Platforms to work, if this is your problem.  Unfortunately, even though I now have mobile enabled for new projects, I can't enable it for existing ones and Project Magician although installed according to  registry is not showing in the IDE.  I have posted in third party to ask Uwe if he has any ideas about what is wrong.

    As a last resort, I'll recreate my project files as there aren't many.  Still taking baby steps with mobile.

     

    Regards

    Sue


  10. Hi Curt,

     

    For your peace of mind, deleting, adding and re-registering is something I did and it didn't do any damage, although it will have bumped my installation count.  It didn't fix my problem - I have now been advised to download the ISO and reinstall.

     

    My problem is with the 10.3 installation via web, and I suspect from this and other comments, it really is still pretty buggy and the ISO is safer. 

     

    Sue


  11. I have a similar position to you.  I thought I would try the web installer instead of ISO this time.

    My licence shows Professional with Mobile.

     

    I tried installing Android from Platform manager. Initially it wouldn't work because after checking install, I needed to go to Additional Options tab and also check installing the Java Developement Kit and Android SDK 25.25 NDK r17b, so they installed before Delphi Android Professional installed.

     

    After getting the Delphi Android 'successfully' installed, I still don't have Android SDKs in Options -> Deployment -> SDK Manager.

     

    I also used the Platform Installer to install MacOS and Windows 64 bit.  After this I uninstalled Android and re-installed it, but no difference in the outcome.

     

    On opening a project,  Windows 32 and iOS are the only available platforms.

     

    After logging a support case, I have received 1 reply to my support case suggesting that I re-register my licence.  This had no effect.  My symptoms are that not only is Android not shown in the SDK Manager, Android, Windows 64bit and MacOS are not shown as platforms for selection.

     

    I've sent a reply to Support indicating failure of their solution.  I'll let you know what comes back in case it helps you.

    Regards

    Sue

     


  12. I don't quite understand where the gettext version is used in this code.

    3 minutes ago, pyscripter said:
    
      {$ifdef UNICODE}
      HookLoadResString:=THook.Create (@system.LoadResString, @LoadResStringW);
      {$else}
      HookLoadResString:=THook.Create (@system.LoadResString, @LoadResStringA);
      {$endif}

     

    The system functions are replaced with gettext versions that return translated strings.  So wherever you use resource strings translated values will appear.

    I interpreted it to mean that LoadResString uses Windows LoadResStringW (for example) instead of the Borland implementation to get the string, and that string is then passed to gettext.  Is this not correct ?


  13. My previous suspicions that it is related to load strings seem to be borne out.  I noticed that the Nexus code does use resource strings.

     

    I can make the latest version r115 work by commenting out one line :

     

    HookLoadResString.Enable;

     

    Prior to that, r47 worked as is.  I could get r75 to work by adding the the lines referencing CreatorThread.

    r76 introduces GetResString and re-adding CreatorThread references did not help, hence looking for other changes I could make.

     

    What is the purpose of using Windows LoadResStringW (for unicode) instead of the Borland version ? What does 'gettext enabled version' mean ?

     

    Sue


  14. I have a very difficult to find (for me) issue with a version of gnugettext.pas shown as $LastChangedRevision 220 $ with Thomas Mueller and Olivier Sannier in the contributors' list that does not occur in a version with the same revision, and without those contributors.  I'm not sure where either of file came from, but thought I had them from the Sourceforge repository in 2017.   There are a number of different versions in the repository, and all of them with $DEFINEs of the form dx_xxxx seem to cause the problem.

     

    The reason it is difficult to find is that it only happens in programs that use some of the Nexus DB components, and it results in the component going into an endless loop when a stopping as some threads do not terminate.

     

    I'm just looking at this again after a long period of ignoring it by using an older version of gnugettext.

     

    This is with 10B.

     

    The test application works fine on its own.  As soon as I add gnugettext to the uses clause, it fails.  The app does not actually call anything in gnugettext.

     

    I assume the only way to narrow it down is to change the working version and add the changes that are in later versions and see which one causes the problem.

     

    Which of the many different versions in the repository should I aim for ?

     

    Regards

    Sue


  15. For anyone who has this problem, I found the solution on the Embarcadero forums (second attempt).

     

    An email with a serial number was sent out in June 2017.  This was a different serial number from the one I had been trying.  It worked.

     

    I did have to add the component package manually.


  16. 2 hours ago, Schokohase said:

    Well, so you think they ask for a serial number just for joking?

     

    What makes you feel they want to have the serial from embarcadero or that they will accept a very old serial from themself? 

     

    Ask the vendor support, they will help you

     

     

    I thought it didn't need a serial number because of a post by Marco Canto on 30 March, 2017.  This post is about components and libraries available on Getit for Tokyo 10.2.

     

    One paragraph, labeled Konopka Controls and Radiant Shapes states

    'While they still run a separate installer, this is not asking for an additional license key any more and installs the components only for 10.2 Tokyo'.

     

    I thought the same would happen for Rio.

     

    Before raising an issue with Embarcadero, I thought I would check with others in case I was missing something simple.

×