PureBytes Links
Trading Reference Links
|
Now I'm using TS4 so I can't do any of that last time I checked but
since I know enough C to be dangerous, I would try dereferencing the
array itself, not the first element of the array, if I understand what
you are trying to do correctly.
Adam
On 09/04/05 18:56 Alex wrote:
Hopefully I explain this properly :D
Let's say you have a signal (mysignal) and in it you declare an array
array: myarray[5](0);
Now, you have a function(myfunction) that will take the array, and
permanently modify the values (hence you want to pass it to the
function by numeric reference)
so in the signal you go : myfunc(myarray)
and in the function 'header', you declare: inputs:
myarray[length](numericarrayref);
Okay, so now in the function you can play array with it and change
values in the array, etc...
Okay, now here's the kicker - in the function, let's say you want to
display the memory address of the myarray[0] ; you'd go
&myarray[0] .... but guess what - invalid pointer operation.
Why would I want to access the memeory address of the 1st element
anyways? - because, in that function I've got a DLL call (written in
C++) that will take the array, and modify it - so in the DLL i've
declared a floating pointer to store the address of the array (float
*myptr); hence I have to pass the address of the array to the DLL by
calling something like MYDLL(&myarray[0]). Well - because the array
was passed by numeric reference, I can't use it's memory address
(invalid pointer operation in Easylanguage) in the function code, only
in the initial signal code where it was created.
Any thoughts on how to get around that? The only solution I've had so
far is to write a function in the DLL that will store the memory
address of the array. Then, in the signal part of the code, as soon as
the array is created and initialized, I call the DLL function that
will store the memory address, and then store the memory address to
the array globally.
That way, in the function part of the tradestation code, I don't have
to pass the address of the array because it's already been passed, so
the DLL knows exactly where the array is in memory.
It's a good solution imho, but it does leave me wondering something -
how can you create an array in a signal, pass the array via numeric
reference to another function, then pass the array (from the function)
into a DLL function (using pointers) w/o generating an invalid pointer
message.
Perplexing?
-Alex
|