今回はなでしこから見ると全部「ハンドル」として見えるので、
DLL側で全てのハンドルを管理できる構造体を作成します。
------ここから------
typedef struct
{
int index;
unsigned long flag;
int size;
CRITICAL_SECTION crit;
union
{
unsigned long byte_hdl;
unsigned char b[4];
void *buf_hdl;
void *list_hdl;
FILE *fp_hdl;
int sock_hdl;
HANDLE ser_hdl;
}u;
void *pextend;
void *pprev;
void *pnext;
}COMM_HANDLE;
このプラグインは主に通信用途と、一般的なC的関数の実装
を意識したのでCommunication, Commonを意識して"COMM_"
としました。
構造自体は簡単で、unionの中にハンドル本体を保存する
変数、もしくはポインタが配置されてます。1,2,4byteのバイト
配列はunsigned char, unsigned short, unsigned longに相当
するものとして、これは構造体の中で値を管理します。
その他のハンドルはポインタです。あ、socketはポインタ
じゃなかったな(^^;。
pextendは各ハンドルに対して付加的な情報が必要な場合に
使用します。pprevとpnextはキューとかスタックをリスト構造で
管理してるので、それらを管理する場合にこの構造体を
連結するためのものです。
実際、なでしこの各変数もこれに近い構造体で管理している
ので、こういう言語拡張系のDLLではまずまず一般的な
形なのではないかと思います。