RFA Exception Handler - Access Violation / Excel Vba Eikon

I implemented a VBA script which collects all options in a Chain (e.g. "0#ABBN*.EX") via

the AdfinXRtLib.AdxRtChain object. Next the script queries data for all options the chain via

AdfinXRtLib.AdxRtList (~300 RICS, 10 FID). So fare the script works as intended.

However, if this is done in a loop of ~100+ iterations excel crashes with the below error message.

Do you have an idea what goes wrong?

(In every loop new API objects are initialize, I have no other COM add-ins active.

I'm using AdfinX Real Time 6.0 Library.)

RFA Exception Handler

Application: EXCEL
Process Id: 0x330C
Thread Id: 0x47C0

File: ..\..\..\Common\Support\OS\Impl\Thread.cpp
Line: 51

Problem:
Exception "Access Violation" (0xC0000005) occured at 0x52BBF608: memory at 0x00000000 cannot be read

Best Answer

  • Unknown
    Answer ✓

    @Zhenya Kovalyov the samplefile does not trigger an error. I assume the problem is triggered by creating a new AdxRtLists for each request. If I reuse the same object for each request the error does not trigger.

    Maybe, I should keep one AdxRtLists object alive and register/unregister new items in each request.?

    I do not request multiple instruments at the same time because I need the results for further calculations which should not be based on outdated market prices. Furthermore the sequence and time of each instrument is unknown.

Answers

  • Could you upload a sample Excel file with this issue? Thanks

  • Are these calls sequential, i.e. you are creating a new request after receiving a response for the previous iteration?

  • I created a simplified xslm file where the exeption still occures. Simply run the sub test. The script crashes between i=250 and i=300. Thanks for your support.

    Yes, it creates a new request with each iteration.

    rfaaccessviolation.zip

  • @sascha.arican, is there a reason why you request the instruments with multiple AdxRtLists instead of running a single request for multiple instruments?

    In the meantime, could you open this file adxrtlist-samplexlsm.zip run the following sequence:

    1. Create()

    2. Request()

    and after "DONE" in the immediate window

    3. Dispose()

    Does it trigger an error?

  • Well, it looks like that the error is triggered when you destroy the object rather than create it. In the sample file I decouple the event handler routine from disposing of the created objects, and it works fine.

    Reusing the object is also a possibility, make sure that you do it correctly by executing

    mAdxRtList.StopUpdates 

    mAdxRtList.CloseAllLinks

    mAdxRtList.UnregisterAllItems
  • @Zhenya Kovalyov

    Thanks, with reusing the object it works very well now.