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
Are these calls sequential, i.e. you are creating a new request after receiving a response for the previous iteration?
@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.
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
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.
@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?