PureBytes Links
Trading Reference Links
|
Hello,
If anyone cares, the bugs described below appear to be fixed in TS7.1.
Regards,
Brendan
---
Brendan B. Boerner
brendan@xxxxxxxxxxxxxx
Karakhorum Ventures, Inc.
www.Karakhorum.com
> -----Original Message-----
> From: Brendan B. Boerner [mailto:brendan@xxxxxxxxxxxxxx]
> Sent: Thursday, May 08, 2003 2:07 PM
> To: Omega-List
> Subject: External DLLs in TS7 vs. 2000i
>
>
> Hello,
>
> (This e-m is being individually sent to several Omega / TradeStation
> lists which have previously had TradeStation DLL threads.}
>
> This e-m is to outline some behavior I'm seeing using a DLL w/TS
> 2000i vs. v7. If anyone else has seen this behavior, or can shed
> light on it, I'd love to hear it. Otherwise perhaps this can help
> someone who's currently (or planning) to use a DLL w/v7.
>
> 1. When using a 'legacy' DLL (that written to export to the
> Dll_{Add,Context,Free()} APIs introduced in 2000i) w/TS7 I've noticed
> that it does not appear to unload the DLL when an indicator using the
> DLL is removed from a chart.
>
> I log to a file when my DLL starts and stops. Using 2000i (and I
> believe v6) I see a log entry for both the DLL startup and shutdown.
>
> Using TS7 I see only the log entry for the startup. In addition
> after shutting down TS7 I notice that orchart.exe remains running (as
> seen using TaskMan). When I kill orchart.exe my DLL is unloaded.
>
> It appears that this is one manifestation of a bug (gasp!) in TS7.
> The other manifestation is as follows:
>
> Suppose I open a workspace and add an indicator (which uses my DLL).
> I then close the workspace (either deleting the indicator or not, it
> doesn't change the behavior). I still have a orchart.exe running. I
> re-open the workspace, now I have two orchart.exes running. I add my
> indicator and close the workspace, still have two orchart.exes
> running. I re-open the workspace, now I have three orchart.exes
> running.
>
> From the behavior it seems that someone forgot to do a FreeLibrary()
> someplace...
>
> 2. I've also noticed that the use of Dll_Add() / Dll_Context()
> appears to have changed. In 2000i Dll_Context() would be called
> prior to calling into my DLL for *each* data point.
>
> In TS7 it doesn't appear that Dll_Context() is ever called. This
> means that if you have more than one indicator, etc. using the DLL,
> the DLL won't be able to distinguish between them.
>
> Looking at the TS7 EasyLanguage Extension SDK I see that TradeStation
> Technologies appears to have deprecated the Dll_{Add,Context,Free}()
> constructs and replaced them with a model built on 'events'.
>
> At first review this might be a good thing. With the ability to get
> an IEasyLanguageObject when a DLL function is called one can get the
> Open, High, Low, Close, etc. w/o requiring the user to pass this in
> as part of the function call.
>
> It seems to me though that to support *legacy* DLLs that TT should
> have continued to support the Dll_Context(), yes?
>
> I've modified my DLL and EL code to support v7s changes and I'm able
> to get around the Dll_Context() problem - I can differentiate between
> two or more uses of my DLL. My soln to the stranded orchart.exe is
> to kill the process by hand.
>
> 3. When using the IEasyLanguageObject * form of a DLL export, it
> doesn't appear that you can use a passed in float * to return a value
> e.g.
>
> In 2000i if you had a function which returned a value like so:
>
> int __stdcall
> MyFunc(float *p_fResult)
> {
> *p_fResult = <something>;
> }
>
> this won't work:
> int __stdcall
> MyFunc(IEasyLanguageObject *p_pEL, float *p_fResult);
> {
> *p_fResult = <something>;
> }
>
> Instead I needed to do this:
> int __stdcall
> MyFunc(IEasyLanguageObject *p_pEL, const char *p_pszVarName);
> {
> if (p_pEL)
> {
> p_pEL->Variables[p_pszVarName]->Value[0] = <something>;
> }
> else
> {
> // Error
> } /* end if-else */
> }
>
>
> Cheers,
> Brendan
> ---
> Brendan B. Boerner
> brendan@xxxxxxxxxxxxxx
> Karakhorum Ventures, Inc.
> www.Karakhorum.com
|