Erlang:无法find指定的模块

我有一个最低限度的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. 

其中产生:

指定的模块无法find。

我已经检查到驱动程序存在于当前目录中,甚至指定了完整path,但是Erlang仍然没有看到它。 有任何想法吗?

在Windows上,文件的扩展名应该是ddl ,而不是dll

你可能应该使用'file:get_cwd'来获取当前的工作目录,然后追加你的路径。

也很方便,但可能与您当前的问题无关:您是否检查过Erlang仿真器使用的代码路径? 使用函数'code:get_path'( http://www.erlang.org/doc/man/code.html )检查搜索路径。 你可以使用'code:add_path'方便地插入路径。

把你们和我刚刚砍过的最低限额的比较一下。 可能帮助,可能没有帮助…

  • 我还包括ei.h

  • 我声明ErlDrvEntry erl_driver_bridge_entry静态