RFA Exception Handler - Access Violation / Excel Vba Eikon

sascha
sascha Explorer

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

Welcome!

It looks like you're new here. Sign in or register to get started.

Best Answer

  • sascha
    sascha Explorer
    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?

  • sascha
    sascha Explorer

    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, 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
  • sascha
    sascha Explorer

    @Zhenya Kovalyov

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

Welcome!

It looks like you're new here. Sign in or register to get started.

Welcome!

It looks like you're new here. Sign in or register to get started.