2009-08-28 47 views
2

我有一个最低性能二郎端口驱动程序:二郎:指定的模块找不到

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; 
} 

然后我试着加载它在二郎:

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

哪个生产:

无法找到指定的模块。

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

回答

1

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

+0

你说得对,我错过了那部分文档。不幸的是,它仍然无法加载。虽然这一次,错误代码是-136而不是-167,但format_error仍然返回“指定的模块找不到”。 :( – 2009-08-28 12:40:48

+1

下载此实用程序并使用它来尝试加载您的文件 - http://www.dependencywalker.com/ - 它应该显示您依赖的其他文件以及您的图书馆是否可以实际加载或不加载。发现你错过了另一个依赖dll ... – 2009-08-28 13:12:06

+0

它缺少MSVCR90.dll,所以我使用/ MT标记进行编译,现在Dependency Walker报告没有错误,但Erlang仍然拒绝加载它 – 2009-08-28 21:30:14

0

比较你的我最小的一个,我刚才砍了。也许会有帮助,可能不会帮助...

  • 我还包括ei.h

  • 我宣布ErlDrvEntry erl_driver_bridge_entry静态

1

你或许应该使用 '文件:get_cwd' 得到首先在当前工作目录下并追加你的路径。

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

相关问题