亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pluginmgr.cxx

?? 安裝 H323需要的pwlib庫
?? CXX
字號:
/* * pluginmgr.cxx * * Plugin Manager Class * * Portable Windows Library * * Contributor(s): Snark at GnomeMeeting * * $Log: pluginmgr.cxx,v $ * Revision 1.26  2004/08/16 06:40:59  csoutheren * Added adapters template to make device plugins available via the abstract factory interface * * Revision 1.25  2004/07/12 09:17:21  csoutheren * Fixed warnings and errors under Linux * * Revision 1.24  2004/07/06 10:12:54  csoutheren * Added static integer o factory template to assist in ensuring factories are instantiated * * Revision 1.23  2004/06/30 12:17:06  rjongbloed * Rewrite of plug in system to use single global variable for all factories to avoid all sorts *   of issues with startup orders and Windows DLL multiple instances. * * Revision 1.22  2004/06/24 23:10:28  csoutheren * Require plugins to have _pwplugin suffix * * Revision 1.21  2004/06/03 13:30:59  csoutheren * Renamed INSTANTIATE_FACTORY to avoid potential namespace collisions * Added documentaton on new PINSTANTIATE_FACTORY macro * Added generic form of PINSTANTIATE_FACTORY * * Revision 1.20  2004/06/03 12:47:59  csoutheren * Decomposed PFactory declarations to hopefully avoid problems with Windows DLLs * * Revision 1.19  2004/06/01 05:44:57  csoutheren * Added OnShutdown to allow cleanup on exit * * Revision 1.18  2004/05/18 06:01:13  csoutheren * Deferred plugin loading until after main has executed by using abstract factory classes * * Revision 1.17  2004/05/06 11:29:35  rjongbloed * Added "current directory" to default plug in path. * * Revision 1.16  2004/05/02 17:06:42  ykiryanov * Ifdefd inclusion of algorithm for BeOS * * Revision 1.15  2004/05/02 08:37:56  rjongbloed * Fixed loading of plug ins when multiple plug in class sets used. Especially H.323 codecs. * * Revision 1.14  2004/04/22 11:43:48  csoutheren * Factored out functions useful for loading dynamic libraries * * Revision 1.13  2004/04/14 08:12:04  csoutheren * Added support for generic plugin managers * * Revision 1.12  2004/04/09 06:03:47  csoutheren * Cannot do PProcess virtual, so code is now in the plugin manager * * Revision 1.11  2004/04/09 05:54:41  csoutheren * Added ability for application to specify plugin directorories, or to specify directories by environment variable * * Revision 1.10  2004/03/23 04:43:42  csoutheren * Modified plugin manager to allow code modules to be notified when plugins * are loaded or unloaded * * Revision 1.9  2004/02/23 23:56:01  csoutheren * Removed unneeded class * * Revision 1.8  2004/01/18 21:00:15  dsandras * Fixed previous commit thanks to Craig Southeren! * * Revision 1.7  2004/01/17 17:40:57  csoutheren * Changed to only attempt loading of files with the correct library file extension * Changed to handle plugins without a register function * * Revision 1.6  2004/01/17 16:02:59  dereksmithies * make test for plugin names case insensitive. * * Revision 1.5  2003/11/18 10:39:56  csoutheren * Changed PTRACE levels to give better output at trace level 3 * * Revision 1.4  2003/11/12 10:27:11  csoutheren * Changes to allow operation of static plugins under Windows * * Revision 1.3  2003/11/12 06:58:59  csoutheren * Added default plugin directory for Windows * * Revision 1.2  2003/11/12 03:27:25  csoutheren * Initial version of plugin code from Snark of GnomeMeeting with changes *    by Craig Southeren of Post Increment * * */#include <ptlib.h>#include <ptlib/pluginmgr.h>#ifndef __BEOS__#include <algorithm>#endif#ifndef	P_DEFAULT_PLUGIN_DIR#  ifdef  _WIN32#    define	P_DEFAULT_PLUGIN_DIR ".;C:\\PWLIB_PLUGINS"#  else#    define	P_DEFAULT_PLUGIN_DIR ".:/usr/lib/pwlib"#  endif#endif#ifdef  _WIN32#define DIR_SEP   ";"#else#define DIR_SEP   ":"#endif#define ENV_PWLIB_PLUGIN_DIR  "PWLIBPLUGINDIR"#define PWPLUGIN_SUFFIX       "_pwplugin"//////////////////////////////////////////////////////void PPluginManager::LoadPluginDirectory (const PDirectory & dir){   PLoadPluginDirectory<PPluginManager>(*this, dir, PWPLUGIN_SUFFIX); }PStringArray PPluginManager::GetPluginDirs(){  PString env = ::getenv(ENV_PWLIB_PLUGIN_DIR);  if (env == NULL)    env = P_DEFAULT_PLUGIN_DIR;  // split into directories on correct seperator  return env.Tokenise(DIR_SEP, TRUE);}PPluginManager & PPluginManager::GetPluginManager(){  static PPluginManager systemPluginMgr;  return systemPluginMgr;}BOOL PPluginManager::LoadPlugin(const PString & fileName){  PWaitAndSignal m(pluginListMutex);  PDynaLink *dll = new PDynaLink(fileName);  if (!dll->IsLoaded()) {    PTRACE(4, "Failed to open " << fileName);  }  else {    unsigned (*GetAPIVersion)();    if (!dll->GetFunction("PWLibPlugin_GetAPIVersion", (PDynaLink::Function &)GetAPIVersion)) {      PTRACE(3, fileName << " is not a PWLib plugin");    }    else {      int version = (*GetAPIVersion)();      switch (version) {        case 0 : // old-style service plugins, and old-style codec plugins          {            // declare local pointer to register function            void (*triggerRegister)(PPluginManager *);            // call the register function (if present)            if (dll->GetFunction("PWLibPlugin_TriggerRegister", (PDynaLink::Function &)triggerRegister))               (*triggerRegister)(this);            else {              PTRACE(3, fileName << " has no registration-trigger function");            }          }          // fall through to new version        case 1 : // factory style plugins          // call the notifier          CallNotifier(*dll, 0);          // add the plugin to the list of plugins          pluginList.Append(dll);          return TRUE;        default:          PTRACE(3, fileName << " uses version " << version << " of the PWLIB PLUGIN API, which is not supported");          break;      }    }  }  // loading the plugin failed - return error  dll->Close();  delete dll;  return FALSE;}PStringList PPluginManager::GetPluginTypes() const{  PWaitAndSignal n(serviceListMutex);  PStringList result;  for (PINDEX i = 0; i < serviceList.GetSize(); i++) {    PString serviceType = serviceList[i].serviceType;    if (result.GetStringsIndex(serviceType) == P_MAX_INDEX)      result.AppendString(serviceList[i].serviceType);  }  return result;}PStringList PPluginManager::GetPluginsProviding(const PString & serviceType) const{  PWaitAndSignal n(serviceListMutex);  PStringList result;  for (PINDEX i = 0; i < serviceList.GetSize(); i++) {    if (serviceList[i].serviceType *= serviceType)      result.AppendString(serviceList[i].serviceName);  }  return result;}PPluginServiceDescriptor * PPluginManager::GetServiceDescriptor (const PString & serviceName,					                         const PString & serviceType){  PWaitAndSignal n(serviceListMutex);  for (PINDEX i = 0; i < serviceList.GetSize(); i++) {    if ((serviceList[i].serviceName *= serviceName) &&        (serviceList[i].serviceType *= serviceType))      return serviceList[i].descriptor;  }  return NULL;}BOOL PPluginManager::RegisterService(const PString & serviceName,				     const PString & serviceType,				     PPluginServiceDescriptor * descriptor){  PWaitAndSignal m(serviceListMutex);  // first, check if it something didn't already register that name and type  for (PINDEX i = 0; i < serviceList.GetSize(); i++) {    if (serviceList[i].serviceName == serviceName &&        serviceList[i].serviceType == serviceType)      return FALSE;  }    PPluginService * service = new PPluginService(serviceName, serviceType, descriptor);  serviceList.Append(service);  PDevicePluginAdapterBase * adapter = PFactory<PDevicePluginAdapterBase>::CreateInstance(serviceType);  if (adapter != NULL)    adapter->CreateFactory(serviceName);  return TRUE;}void PPluginManager::AddNotifier(const PNotifier & notifyFunction, BOOL existing){  PWaitAndSignal m(notifierMutex);  notifierList.Append(new PNotifier(notifyFunction));  if (existing)    for (PINDEX i = 0; i < pluginList.GetSize(); i++)       CallNotifier(pluginList[i], 0);}void PPluginManager::RemoveNotifier(const PNotifier & notifyFunction){  PWaitAndSignal m(notifierMutex);  for (PINDEX i = 0; i < notifierList.GetSize(); i++) {    if (notifierList[i] == notifyFunction) {      notifierList.RemoveAt(i);      i = 0;      continue;    }  }}void PPluginManager::CallNotifier(PDynaLink & dll, INT code){  PWaitAndSignal m(notifierMutex);  for (PINDEX i = 0; i < notifierList.GetSize(); i++)    notifierList[i](dll, code);}////////////////////////////////////////////////////////////////////////////////////PPluginModuleManager::PPluginModuleManager(const char * _signatureFunctionName, PPluginManager * _pluginMgr)  : signatureFunctionName(_signatureFunctionName){  pluginList.DisallowDeleteObjects();  pluginMgr = _pluginMgr;;  if (pluginMgr == NULL)    pluginMgr = &PPluginManager::GetPluginManager();}void PPluginModuleManager::OnLoadModule(PDynaLink & dll, INT code){  PDynaLink::Function dummyFunction;  if (!dll.GetFunction(signatureFunctionName, dummyFunction))    return;  switch (code) {    case 0:      pluginList.SetAt(dll.GetName(), &dll);       break;    case 1:       {        PINDEX idx = pluginList.GetValuesIndex(dll.GetName());        if (idx != P_MAX_INDEX)          pluginList.RemoveAt(idx);      }      break;    default:      break;  }  OnLoadPlugin(dll, code);}////////////////////////////////////////////////////////////////////////////////////class PluginLoaderStartup : public PProcessStartup{  PCLASSINFO(PluginLoaderStartup, PProcessStartup);  public:    void OnStartup()    {       // load the actual DLLs, which will also load the system plugins      PStringArray dirs = PPluginManager::GetPluginDirs();      PPluginManager & mgr = PPluginManager::GetPluginManager();      PINDEX i;      for (i = 0; i < dirs.GetSize(); i++)         mgr.LoadPluginDirectory(dirs[i]);      // now load the plugin module managers      PFactory<PPluginModuleManager>::KeyList_T keyList = PFactory<PPluginModuleManager>::GetKeyList();      PFactory<PPluginModuleManager>::KeyList_T::const_iterator r;      for (r = keyList.begin(); r != keyList.end(); ++r) {        PPluginModuleManager * mgr = PFactory<PPluginModuleManager>::CreateInstance(*r);        if (mgr == NULL) {          PTRACE(1, "PLUGIN\tCannot create manager for plugins of type " << *r);        } else {          PTRACE(1, "PLUGIN\tCreated manager for plugins of type " << *r);          managers.push_back(mgr);        }      }    }    void OnShutdown()    {      while (managers.begin() != managers.end()) {        std::vector<PPluginModuleManager *>::iterator r = managers.begin();        PPluginModuleManager * mgr = *r;        managers.erase(r);        mgr->OnShutdown();      }    }  protected:    std::vector<PPluginModuleManager *> managers;};PFactory<PProcessStartup>::Worker<PluginLoaderStartup> pluginLoaderStartupFactory("PluginLoader", true);#ifdef _WIN32PINSTANTIATE_FACTORY(PProcessStartup, PString)#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线中文字幕一区| 日本不卡123| 成人国产精品免费观看| 中文字幕的久久| aaa欧美大片| 亚洲一区二区精品视频| 51久久夜色精品国产麻豆| 久久精品国产亚洲一区二区三区 | 国产精品网站在线| 国产成人99久久亚洲综合精品| 国产精品视频在线看| 一本大道久久a久久综合| 日本亚洲欧美天堂免费| 精品国产人成亚洲区| 成人av小说网| 亚洲444eee在线观看| 久久久久一区二区三区四区| 91视视频在线观看入口直接观看www | 国产99久久久国产精品潘金| 国产精品毛片高清在线完整版| 在线免费精品视频| 麻豆精品精品国产自在97香蕉 | 91在线视频播放地址| 亚洲大片精品永久免费| 久久综合色婷婷| 91丝袜美腿高跟国产极品老师 | 日韩午夜在线影院| 成人av片在线观看| 日韩电影网1区2区| 国产精品色婷婷| 欧美高清一级片在线| 国产成人精品在线看| 亚洲国产精品久久久久婷婷884| 久久久久国产精品麻豆| 欧美日韩不卡视频| av福利精品导航| 麻豆国产欧美一区二区三区| 亚洲精品视频在线观看免费| 精品奇米国产一区二区三区| 91在线免费播放| 精久久久久久久久久久| 亚洲综合色婷婷| 国产精品久久久久久久岛一牛影视 | 国产精品美女久久久久久久网站| 91精品国产免费久久综合| 97久久久精品综合88久久| 久久99精品久久久久婷婷| 亚洲一区二区三区视频在线| 国产精品伦理一区二区| 亚洲精品一区二区三区四区高清| 欧美自拍偷拍午夜视频| 成人黄色电影在线 | 国产精品成人免费| 精品奇米国产一区二区三区| 欧美日产国产精品| 99热在这里有精品免费| 国产超碰在线一区| 国产在线一区二区| 精品亚洲成a人在线观看| 五月综合激情网| 伊人一区二区三区| 亚洲精品视频在线观看免费| 国产精品另类一区| 日本一区免费视频| 国产视频亚洲色图| 日韩女优电影在线观看| 制服丝袜av成人在线看| 欧美日韩国产综合一区二区| 91女人视频在线观看| 99re在线精品| 日本高清不卡aⅴ免费网站| 成人a免费在线看| 成人a级免费电影| av日韩在线网站| 色呦呦网站一区| 欧美三级一区二区| 在线播放日韩导航| 日韩欧美专区在线| 日韩女优毛片在线| 久久精品一区四区| 国产色产综合色产在线视频 | 亚洲欧美偷拍三级| 亚洲激情校园春色| 午夜欧美视频在线观看| 奇米色777欧美一区二区| 久久精品国产77777蜜臀| 国模套图日韩精品一区二区| 国产成人99久久亚洲综合精品| 粉嫩蜜臀av国产精品网站| 成人av先锋影音| 欧美日韩专区在线| 日韩一区二区三区电影在线观看| 欧美大片顶级少妇| 欧美国产一区二区| 亚洲视频免费在线| 亚欧色一区w666天堂| 韩国精品免费视频| av电影在线观看不卡| 欧美午夜不卡在线观看免费| 日韩精品自拍偷拍| 国产精品久久久久久久蜜臀 | 亚洲国产精品麻豆| 激情六月婷婷综合| 99久久精品国产精品久久| 欧美午夜一区二区三区| 亚洲精品一区二区三区四区高清| 中文字幕av资源一区| 亚洲一区二区三区四区中文字幕| 久久激情综合网| 成人黄色片在线观看| 91精品国产综合久久福利| 久久久国产综合精品女国产盗摄| 亚洲视频中文字幕| 蓝色福利精品导航| 99国产精品久久久久| 欧美一级日韩免费不卡| 国产精品无遮挡| 美腿丝袜亚洲色图| 色呦呦日韩精品| 国产日韩欧美亚洲| 亚洲bt欧美bt精品| 99re视频精品| 久久久久久免费毛片精品| 亚洲最大成人网4388xx| 成人黄色片在线观看| 日韩午夜激情av| 亚洲与欧洲av电影| 国产成人免费视频精品含羞草妖精| 欧美探花视频资源| 中文字幕免费在线观看视频一区| 日韩电影在线观看一区| 91丨九色丨蝌蚪丨老版| 欧美白人最猛性xxxxx69交| 一区二区三区不卡视频在线观看| 久草精品在线观看| 欧美日韩精品一区二区三区蜜桃 | 一区二区视频在线| 国产成人av福利| 日韩亚洲欧美中文三级| 一区二区不卡在线播放| 成人不卡免费av| 欧美精彩视频一区二区三区| 免费在线观看成人| 欧洲精品一区二区| 亚洲欧美影音先锋| 国产成人免费网站| 2021久久国产精品不只是精品| 五月天视频一区| 欧美色图第一页| 亚洲国产成人精品视频| 日本精品视频一区二区| 亚洲日本一区二区三区| 成人黄色国产精品网站大全在线免费观看| 日韩精品专区在线| 美女网站视频久久| 91精品国产综合久久香蕉的特点| 亚洲男女毛片无遮挡| 99久久精品国产麻豆演员表| 国产精品不卡视频| 99久久国产综合精品色伊| 国产日韩欧美高清| eeuss鲁片一区二区三区在线观看| 久久久亚洲精品石原莉奈| 久久精品国产99| 欧美精品一区二区久久婷婷 | 日本一区二区免费在线| 风间由美性色一区二区三区| 欧美韩日一区二区三区| 99视频热这里只有精品免费| 一区二区中文视频| 91老师国产黑色丝袜在线| 亚洲免费观看高清完整版在线观看熊 | 91老师国产黑色丝袜在线| 亚洲欧美日韩电影| 精品1区2区3区| 偷拍亚洲欧洲综合| 日韩欧美国产高清| 国产一区二区三区在线观看免费视频| 精品欧美一区二区三区精品久久| 狠狠狠色丁香婷婷综合激情| 中文字幕成人av| 日本高清成人免费播放| 午夜欧美大尺度福利影院在线看| 欧美浪妇xxxx高跟鞋交| 久久精品国产一区二区三| 久久精品日韩一区二区三区| 国产91丝袜在线播放0| 亚洲三级在线播放| 欧美疯狂做受xxxx富婆| 久久99精品久久久久婷婷| 中文在线一区二区| 欧美在线free| 久久se精品一区二区| 欧美经典三级视频一区二区三区| 99视频精品全部免费在线| 天堂蜜桃91精品| 国产欧美日韩精品在线| 欧美日韩国产高清一区二区三区 | 五月激情综合网| 久久一区二区视频|