src/dll_loader_helper_beam_nif.erl

-module(dll_loader_helper_beam_nif).
-export([add_dll_directory/1]).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.

-on_load(init/0).

-define(APPNAME, dll_loader_helper_beam).
-define(LIBNAME, dll_loader_helper_beam).

init() ->
    case os:type() of
        {win32, nt} ->
            SoName = 
                case code:priv_dir(?APPNAME) of
                    {error, bad_name} ->
                        case filelib:is_dir(filename:join(["..", priv])) of
                            true ->
                                filename:join(["..", priv, ?LIBNAME]);
                            _ ->
                                filename:join([priv, ?LIBNAME])
                        end;
                    Dir ->
                        filename:join(Dir, ?LIBNAME)
                end,
            erlang:load_nif(SoName, 0);
        _ ->
            ok
    end.

not_loaded(Line) ->
    erlang:nif_error({not_loaded, [{module, ?MODULE}, {line, Line}]}).

add_dll_directory(_DllDirectory) ->
    case os:type() of
        {win32, nt} ->
            not_loaded(?LINE);
        _ ->
            ok
    end.

-ifdef(EUNIT).
add_dll_directory_test() ->
    case os:type() of
        {win32, nt} ->
            ?assertEqual(add_dll_directory("C:/"), ok);
        _ ->
            true
    end.
-endif.