PureBytes Links
Trading Reference Links
|
As a little follow-up,
I guess I should have thought of it myself actually.
I knew that MS-Access's VBA had regular size integers (2 bytes)
and long size integers (4 bytes).
It never occurred to me that EL would be designed
for only the one size and most likely the longer size.
MS-Access automatically converts sizes most times.
It warns of conflicts too.
Calls to a DLL function are not likely going to do that.
Of note, MS-Access can do "double" as well.
It has a whole series of types (integers and floats).
There is a help page that lists the attributes of each type.
(at least in MS-Access-97 there is).
So for those calling global variables from
MS-Excel there may be a similar help page.
John
Prior submissions below.
=======================================
Thanks guys.
For any interested, the suggestions given by both Mark Simms and Dmitri
Bogucharsky solved the problem.
Specifically I changed the integer definitions in MS-Access-97 to long
definitions.
I included the new MS-Access-97 code at the very bottom.
It is highlighted like this.
=======================================================
MS-Access Code that worked when integer definitions
were changed to long definitions.
=======================================================
Thanks again,
John.
Original email follows with correct at the very bottom
==================================
Hi,
I am doing a simple test using Global Variables 2.2 which is failing.
Maybe someone knows the trick to this and could help.
I list what works then what fails below.
Then I show the simple bare bones code.
This works:
I can set the value inside the simple system with GV_SetInteger.
I can get the value back inside the simple system with GV_GetInteger
(see below)
This works:
I can set the value inside MS-Access with GV_SetInteger.
I can get the value back inside MS-Access with GV_GetInteger
(see below)
This fails:
I am trying to set an integer inside MS-Access-97
then bring that value into a simple test system.
It gives me the message
Trying access at data to future. Bars Reference value : -65516
The log file (see below) shows that the value coming in is -65516
Of note, the path to the DLL is correct since the internal tests work.
The paths are exactly the same in the system and in MS-Access.
Of note, I try "byRef" in MS-Access and it fails inside MS-Access.
Thanks,
John.
=======================================================
Part of the Simple system
=======================================================
variables:
SetGetValue(0);
if CurrentBar = 1 then
Begin
DefineDLLFunc: "C:\ProperPath\GlobalVariable.dll", int,
"GV_GetInteger", int ;
DefineDLLFunc: " C:\ProperPath\GlobalVariable.dll ", int,
"GV_SetInteger", int, int ;
{value1 = GV_SetInteger( 1, 5 ) ;} {Internal test commented out}
SetGetValue = GV_GetInteger( 1 ) ;
Print (File("C:\Access\ALog55.txt"), SetGetValue);
end;
=======================================================
MS-Access Code that failed due to interger definitions
=======================================================
Private Declare Function GV_GetInteger Lib
"C:\ProperPath\GlobalVariable.dll" _
(ByVal intElementLoc As Integer) As
Integer
Private Declare Function GV_SetInteger Lib
"C:\ProperPath\GlobalVariable.dll" _
(ByVal intElementLoc As Integer,
ByVal intSetValue As Integer) As Integer
Private intStatus As Integer
Private Sub fldBV_Upper_AfterUpdate()
Call funcGetIntegerWorks2
End Sub
Private Function funcGetIntegerWorks2()
Dim SetGetValue As Integer: SetGetValue = Me.fldBV_Upper
Dim intEleLoc As Long : intEleLoc = 1 'I tried integer here but it
fails internally within MS-Access.
'I
tried hard coding a 1 in the GV_SetInteger call but the result is the same
intStatus = GV_SetInteger(intEleLoc, SetGetValue)
If intStatus = -1 Then
MsgBox "GV_SetInteger failed with status = " & intStatus
End If
MsgBox "GV_GetInteger returned this value " & GV_GetInteger(intEleLoc)
End Function
=======================================================
MS-Access Code that worked when interger definitions
were changed to long definitions
=======================================================
Private Declare Function GV_GetInteger Lib "C:\Program Files\TS
Support\MultiCharts\GlobalVariable.dll" _
(ByVal intElementLoc As Long) As Long
Private Declare Function GV_SetInteger Lib "C:\Program Files\TS
Support\MultiCharts\GlobalVariable.dll" _
(ByVal intElementLoc As Long,
ByVal intSetValue As Long) As Long
Private Sub fldBV_Upper_AfterUpdate()
'Call funcGetIntegerWorks2 'the original call above was commented out
Call funcGetIntegerWorks3
End Sub
Private Function funcGetIntegerWorks3()
Dim SetGetValue As Long: SetGetValue = Me.fldBV_Upper
Dim intEleLoc As Long: intEleLoc = 1
intStatus = GV_SetInteger(intEleLoc, SetGetValue)
If intStatus = -1 Then
MsgBox "GV_SetInteger failed with status = " & intStatus
End If
MsgBox "GV_GetInteger returned this value " & GV_GetInteger(intEleLoc)
End Function
|