[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(Follow up) Re: Sending a Global Variable from MS-Access-97 to a very simple system is failing.



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