最近开始学ACE,仿照网友的示例写个简单的C/S通信程序,可一直失败.找不出原因啊,于是很自然地联想到使用Winsock之前调用WSAStartup初始化,加上此初始化后,果然成功了.哎,大侠是很难体会到菜鸟的苦衷啊,虽然大侠也是菜鸟成长起来的.
我查了下ACE对WSAStartup的封装操作,ACE命名空间下的有2个函数:init()和fini(),两个导出型的函数,适用于动态链接环境.这两个全局函数分别调用ACE_Object_Manager的init()和fini()成员方法来实现初始化和卸载.由于ACE_Object_Manager在构造函数中调用了init(),在析构函数中调用了fini(),因此只需定义ACE_Object_Manager的一个全局实例就可以完成ACE的初始化了。
ACE_Object_Manager在init成员函数中实例化了ACE_OS_Object_Manager类,而ACE_OS_Object_Manager类的init方法中又调用了
ACE_OS::socket_init (ACE_WSOCK_VERSION);这句才是封装了WSAStartup的操作.