Thank you so very much Razzak.  Most of us become reflective at this time of 
the year and I can sincerely say one of the most fulfilling things I have 
received in my life is the appreciation expressed by you personally, your 
staff,  and by many, many members of the RBase community.

You know that I enjoy helping when I can, and hope I am able to be worthy for 
some time to come.

Mike
----- Original Message ----- 
From: "A. Razzak Memon" <[EMAIL PROTECTED]>
To: "RBASE-L Mailing List" <[email protected]>
Sent: Monday, December 17, 2007 8:08 PM
Subject: [RBASE-L] - Mike Byerley's Gift to the R:BASE Community


>
> R:Folks,
>
> What a wonderful way to unveil an un-documented feature of R:BASE 7.6, C/S:I
> 7.6 and Turbo V-8 for Windows.
>
> Mike, thanks for your perseverance, and your untiring and countless efforts,
> to work with the members of R:Dream Team to implement this very cool feature
> in R:BASE.
>
> I sincerely appreciate all you do for R:BASE Technologies and the R:BASE
> Community.
>
> May every current user of R:BASE find this useful!
>
> Very Best R:egards,
>
> Razzak.
>
> P.S.
> Now that the cat is out of the bag, more technical documents and sample
> applications will be available soon.
>
> ================================================================================
> Originally posted by Mike Byerley on RBG7-L list 06:49 PM 12/17/2007
> ================================================================================
>
> Razzak is giving you this Christmas present a little early.  I did a
> demonstration of this at the Conference and some of the code is on the Zip
> Drive everyone got, but in the short time (I know Bill, I ran over a little
> bit) available, l was not able to get into the meat of what RBTI has done to
> expand the power of RBase even further.
>
> There are hundreds of times the things come up just as Jeffrey and Javier had
> today.
>
> Even though they seemed like desparate issues, they had a commonality in how 
> to
> get from RBase to another source in a seamless fashion.
>
> Just for simplicity here, I am going to show Jeffrey how to solve his issue
> easily and painlessly, as RBTI has done the pain part already by bearing with
> me for the past year to make this kind of stuff a reality.
>
> There is a Windows API function GetEnvironmentVariable that returns the value
> of the variable requested.  If you work in Windows, you will use the 
> definitive
> resource on the planet for Windows, the MSDN Library.
> http://msdn2.microsoft.com/en-us/library/default.aspx
>
> so here is the Code for this issue only.  It will require a longer technical
> paper to describe exactly what and how a bit protracted for an email.  When
> that is ready, we'll first put it up at RBTI DEV resources, then the help
> files.  In a nutshell, we can Load external DLLs once in code and then call
> functions from them after declaring them just ONCE in the session, just as if
> they were a part of RBase.  That part will be in the technical paper.  If the
> function is a part of the Windows API, and the arguments and return values 
> are
> of the same structure (byte) as RBase datatypes, the API can be used without
> Loading, since ALL the Windows API is already running as part of the OS.  We
> only need to DECLARE it once in the RBase Session.  The only caveat is that 
> the
> ORDER of the arguments to a function are REVERSED because the technology
> employed reads the arguments off the STACK in a LastInFirstOut order So the
> Declaration for the function mentioned above will look like this:
>
> STDCALL function 'GetEnvironmentVariableA' alias 'GetEnvironmentVariable' +
> (integer, ptr text, ptr text) : integer
>
> and the standard C++ declaration looks like this:
>
> DWORD WINAPI GetEnvironmentVariable(
>   __in_opt   LPCTSTR lpName,
>   __out_opt  LPTSTR lpBuffer,
>   __in       DWORD nSize
> );
>
> This declaration should be in a Startup location as is appropriate to your
> application.  You can declare as many as you like, but don't declare any you
> are not going to use.
>
> I'm not going to explain the "ALIAS" or the PTR or any of that stuff in this
> missive.  That will be in the technical paper.  This is just to show you what
> you have available to you in 7.6 and 8.0 TODAY...
>
> Then in the application do the following:
>
> SET VAR vret INTEGER = 0
> SET VAR vin TEXT = 'path'
> SET VAR vout TEXT = ''
> SET VAR vsize INTEGER = 1499
>
> SET VAR vret = (dlcall('Kernel32', 'GetEnvironmentVariableA', vsize, vout,
> vin))
>
> the vOUT variable will now contain the value of the enironment variable
> described in vIN and vRet has the length of the string.  We have to set vSize
> to some size great enough to hold the returned string.  It hurts nothing to 
> set
> it to the RBase max size for TEXT.
>
> Notice that the Calling Keyword "DLCall" is the new RBase function to make it
> work and further that the order of the arguments is reversed from the C++
> example above.
>
> Also, ANY of these functions that are declared this way can be used in
> expressions and in database commands INLINE just like normal RBase functions.
> There is no penalty like RBGUDF.exe.
>
> I thank RBTI, Razzak, Alex, and Alexsey for tolerating me to help bring this 
> to
> reality.
>
> That's all for Today.. Merry Christmas to Jeffrey and of course to all.  I 
> have
> a little time available so it won't be too long for an in depth examination 
> and
> explanation of this along with examples.
>
> In the examples, I will try to show how I accidentally stumbled onto how to 
> do
> Ole Automation Line By Line with one little helper DLL.
> ================================================================================
>
>
> 


Reply via email to