NodeLoadModule( )
{
  Module = LoadLibrary(path);
  Proc = GetProcAddress(Module,"DLLRegister");
  Result = (Proc)();
}所有的 Node 在被 NodeLoadModule( ) load 進去的時候,Node 的 DLLRegister( ) 會被呼叫。
所以 node.h 中有宣告:
DLLEXPORT int DLLRegister(int ContextVersion);
DLLEXPORT void DLLUnRegister();所有 作為 Node的 DLL ,都要 include node.h,所以都要 implement DLLRegister( ) 。
Node 的使用用類似 IOControl 的方式,統一一個 funciton interface : Set( ) ,再把需要的功能以 control code 傳進 Set( ) function:
            Node->Set(Node,Msg,&Data,Size);Node 的宣告是:
typedef struct node
{
  int            Class;
  nodeenum    Enum;
  nodeget        Get; //typedef    int (*nodeget)(void* This,int No,void* Data,int Size);
  nodeset        Set; //typedef    int (*nodeset)(void* This,int No,const void* Data,int Size);
} node;...找不到 node 初值(內容) 設定的部份。
nod.Get, Set 設定是在 node 的 Create( ) 。
以 platform 為例:
static int Create(platform* p)
{
   cpudetect Info;
   p->Node.Enum = (nodeenum)Enum;
   p->Node.Get = (nodeget)Get;
   p->Node.Set = (nodeset)Set;
   p->Model = MODEL_UNKNOWN;
在 NodeRegisterClass( ) 時,該 Node的 Create( ) function 會被呼叫。
沒有留言:
張貼留言