-----Original Message-----
From: IBM Mainframe Assembler List
[mailto:[email protected]] On Behalf Of Steve Comstock
Sent: Friday, March 30, 2012 9:06 AM
To: [email protected]
Subject: Re: curiosity question: How much interest in writing
/ using DLLs in assembler?
On 3/30/2012 7:35 AM, McKown, John wrote:
This question is the outgrowth from my writing UNIX
programs which are
designed to be run from a UNIX shell prompt in HLASM. The
first "outgrowth" was
LE enabling all my UNIX HLASM code. The main reason was to be
able to easily use
some selected C language routines, especially sprintf().
Normally, in HLASM, if
we want to dynamically invoke a subroutine, we do with with a
LOAD/BALR or LINK
function. However, that does not work well for UNIX programs
because, as best as
I can tell, you cannot LOAD or LINK to a program which
resides in a UNIX file.
You must put the subroutine in a PDS or PDSE which is
accessable to the UNIX
process. Which normally means the LINKLIST or via a dataset
referenced in the
STEPLIB environment variable. I am a bit of a "purist". When
I'm wrting a UNIX
command, I want everything to be accessable via normal UNIX
facilities.
I have written a "do nothing" dll in HLASM just to try to
learn how to write
a
DLL in HLASM. I have something that appears to work. Now, I
need to write some
HLASM which attempts to actually use that code.
Has anybody else done anything with DLLs in HLASM? If so,
what did you think
of it? Another use for DLLs that I find interesting is to
have data fields in
them be EXPORTed and referenced from other programs. What is
interesting, to me,
is that all references to a DLL in an LE enclave refer to the
same copy. So any
data which is EXPORTed is, in effect, "global" to the LE
enclave. This seems a
reason way to share data. What say ye?
--
John McKown
Systems Engineer IV
IT
Administrative Services Group
HealthMarkets(r)
Yes, well we cover writing and using DLLs written in Assembler
in our course "Creating and Using DLLs in z/OS"; the course
is multi-lingual in that it discusses creating and invoking
DLLs with C, PL/I, COBOL, and Assembler.
See
http://www.trainersfriend.com/Language_Environment_courses/m52
5descr.htm
for details.
But it seems to be a non-starter: no one has ever requested
that we teach it. Judging by that, I would say there is not
much interest. But, there may be pockets of usage out there.
Note that you can load a module from the HFS using the
BPX1LOD callable service, which may be a simpler solution
to the problem you are describing.
As for invoking a DLL from Assembler, here's some snippets from
code in that course:
LOAD alias c'dllload'
QUERYF alias c'dllqueryfn'
QUERYV alias c'dllqueryvar
.
.
.
* Load DLL load module CDLL12
*
CALL LOAD,(DLL_NAME),MF=(E,GENCALL)
.
.
.
* Locate DLL function CDSUB4; if successful, call the function
*
l 2,dll_tok
CALL QUERYF,((2),F2_NAME),MF=(E,GENCALL)
st 15,f2_ptr
c 15,f0
be outa_here
CALL (15),(STRING),MF=(E,GENCALL)
.
.
.
* Locate DLL variable data_area; if successful, change it
l 2,dll_tok
CALL QUERYV,((2),VAR_NAME),MF=(E,GENCALL)
st 15,v_ptr
c 15,f0
be outa_here
mvc 0(l'new_str+1,15),new_str - change value
.
.
.
GENCALL CALL ,(,,,),MF=L
dll_tok ds f
dll_name dc c'CDLL12'
dc x'00'
f2_name dc c'CDSUB4'
dc x'00'
var_name dc c'data_area'
dc x'00'
string dc c'Data from me'
dc x'00'
new_str dc c'funny little string'
dc x'00'
--
Kind regards,
-Steve Comstock
The Trainer's Friend, Inc.
303-355-2752
http://www.trainersfriend.com
* To get a good Return on your Investment, first make an investment!
+ Training your people is an excellent investment
* Try our tool for calculating your Return On Investment
for training dollars at
http://www.trainersfriend.com/ROI/roi.html