5.13.2010

code reading - tcpmp, node


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 會被呼叫。

沒有留言: