Erlang: указанный модуль не найден - PullRequest
2 голосов
/ 28 августа 2009

У меня есть минимальный драйвер порта Erlang:

erl_driver_bridge.c -> erl_driver_bridge.dll

#define __WIN32__

#include "erl_driver.h"

typedef struct {
    ErlDrvPort port;
} erl_driver_bridge_data;

static ErlDrvData bridge_start(ErlDrvPort port, char *buff) {
    erl_driver_bridge_data* d =
        (erl_driver_bridge_data*)driver_alloc(sizeof(erl_driver_bridge_data));
    d->port = port;
    return (ErlDrvData)d;
}

static void bridge_stop(ErlDrvData data) {
    driver_free((char*)data);
}

static void bridge_output(ErlDrvData data, char *buff, int bufflen) {
    erl_driver_bridge_data* d = (erl_driver_bridge_data*)data;
}

ErlDrvEntry erl_driver_bridge_entry = {
    NULL,               /* F_PTR init, N/A */
    bridge_start,       /* L_PTR start, called when port is opened */
    bridge_stop,        /* F_PTR stop, called when port is closed */
    bridge_output,      /* F_PTR output, called when erlang has sent */
    NULL,               /* F_PTR ready_input */
    NULL,               /* F_PTR ready_output */
    "erl_driver_bridge", /* char *driver_name, the argument to open_port */
    NULL,               /* F_PTR finish, called when unloaded */
    NULL,               /* Not used */
    NULL,               /* F_PTR control, port_command callback */
    NULL,               /* F_PTR timeout, reserved */
    NULL,               /* F_PTR outputv, reserved */
    NULL,               /* F_PTR ready_async */
    NULL,               /* F_PTR flush */
    NULL,               /* F_PTR call */
    NULL,               /* F_PTR event */
    ERL_DRV_EXTENDED_MARKER,
    ERL_DRV_EXTENDED_MAJOR_VERSION,
    ERL_DRV_EXTENDED_MINOR_VERSION,
    0,
    NULL,               /* Reserved -- Used by emulator internally */
    NULL,               /* F_PTR process_exit */
};

DRIVER_INIT(erl_driver_bridge) {
    return &erl_driver_bridge_entry;
}

Затем я пытаюсь загрузить его в Erlang:

case erl_ddll:load_driver(".", erl_driver_bridge) of
    ok -> ok;
    {error, Error} -> erl_ddll:format_error(Error)
end.

Который производит:

Указанный модуль не найден.

Я проверил, что драйвер существует в текущем каталоге и даже указал полный путь, но Эрланг все еще не видит его. Есть идеи?

Ответы [ 3 ]

1 голос
/ 10 сентября 2009

Возможно, вам следует использовать file: get_cwd, чтобы сначала получить текущий рабочий каталог, а затем добавить свой путь.

Также удобно, но, вероятно, не связано с вашим текущим вопросом: вы проверили путь к коду, который использует эмулятор Erlang? Используйте функцию 'code: get_path' (http://www.erlang.org/doc/man/code.html) для проверки пути поиска. Вы можете использовать 'code: add_path' для удобной вставки путей.

1 голос
/ 28 августа 2009

В Windows расширение файла должно быть ddl , а не dll ?

0 голосов
/ 28 августа 2009

Сравнение твоего с моим минимальным, которое я взломал некоторое время назад. Может помочь, может не помочь ...

  • Я также включил ei.h

  • Я объявил ErlDrvEntry erl_driver_bridge_entry статическим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...