2009-08-28 76 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'來方便地插入路徑。

相關問題