2014-10-16 48 views

回答

1

ErlDrvPort類型是指向結構體的指針的typedef。要在較舊的驅動程序應用程序中獲取unsigned int異步密鑰類型,您需要將此指針類型轉換爲unsigned int。實現這一目標的方法之一是通過C99 uintptr_t類型,它是保證大到足以容納一個指針的值來施放它:

#include <stdint.h> 
#include "erl_driver.h" 

unsigned int my_port_key(ErlDrvPort port) 
{ 
    return (unsigned int) (uintptr_t) port; 
} 

可以使用驅動程序API版本編寫的便攜函數返回一個異步鍵信息可在erl_driver.h。該driver_async_port_key功能是在驅動程序API 2.2版本推出,所以我們可以使用2.2或更新的版本時要調用driver_async_port_key,或退回到鑄造方法對舊版本:

#include <stdint.h> 
#include "erl_driver.h" 

unsigned int my_port_key(ErlDrvPort port) 
{ 
#if ERL_DRV_EXTENDED_MAJOR_VERSION > 2 || \ 
    (ERL_DRV_EXTENDED_MAJOR_VERSION == 2 && ERL_DRV_EXTENDED_MINOR_VERSION >= 2) 
    return driver_async_port_key(port); 
#else 
    return (unsigned int) (uintptr_t) port; 
#endif 
} 
+0

「你可以寫一個便攜式函數返回一個使用erl_driver.h中提供的驅動程序API版本信息的異步​​密鑰。「是的,這就是我的計劃。謝謝! – 2014-10-17 14:44:05