Call a compiled Beam module
Ulf Wiger
etxuwig@REDACTED
Thu May 8 10:35:41 CEST 2003
On Thu, 8 May 2003, Jilani Khaldi wrote:
>>Good day,
>>
>>Please try:
>>
>>code:add_path("c:/abc").
>>l(mymodule).
>That's Ok, but it loads only the module but not the "*.gif"
>images inside "c:/abc" that the module uses, and it aborts.
>Any idea?
An OTPish way of doing things would be to organize your code
into applications like in the OTP code tree:
$MYROOT/lib/myapp-1.0/ebin/
/priv/
etc.
You can then use the function code:priv_dir(myapp) and find
$MYROOT/lib/myapp-1.0/priv/. From there, you can e.g. slap
on an imgs/ subdirectory and fetch your files.
Another method would be to maintain a variable pointing to
your personal files. This can be done in many ways.
- If you want to specify an OS environment variable, you can
do so, and fetch the location using os:getenv(Variable)
- If you want to specify the location as an argument to
the 'erl' command, you are free to do so:
#: erl -mydir /foo
Erlang (BEAM) emulator version 5.2.3.3 [source] [threads:0]
[kernel-poll]
Eshell V5.2.3.3 (abort with ^G)
1> init:get_argument(mydir).
{ok,[["/foo"]]}
2>
- You can store a value in Mnesia, of course
You can also use code:which(?MODULE) in your code to find
the location of your .beam file. This is a questionable
tactic, since it will be misleading if the module has been
loaded from a patch directory.
I'm sure there are other, perhaps better, ways, but those
were some alternatives off the top of my head.
/Uffe
--
Ulf Wiger, Senior Specialist,
/ / / Architecture & Design of Carrier-Class Software
/ / / Strategic Product & System Management
/ / / Ericsson AB, Connectivity and Control Nodes
More information about the erlang-questions
mailing list