独立使用XPCOM

 

  XPCOM Cross Platform Component Object Model )是一种跨平台组件模型,是 Mozilla 技术的核心。通过 Mozilla 提供的 SDK ,我们可以在我们自己的程序里独立使用 xpcom

 

   下面以 vs2008 的一个简单控制台程序来演示如何使用 XPCOM

  1. 首先从 https://developer.mozilla.org/en/XULRunner_SDK 下载 Gecko 1.9

  2. 设置 VS2008 的的目录, 包含 XULRunner SDK 目录

独立使用XPCOM_第1张图片

 

独立使用XPCOM_第2张图片

  1. 新建一个控制台项目,设置项目属性;

 

  • 在【项目属性】 -> c++ -> 【预处理】的【预处理定义】中定义 "XP_WIN"

独立使用XPCOM_第3张图片

 

  • 在【项目属性】 -> c++ -> 【语言】中的 【将 wchar_t 视为内置类型】中选 " "

 

独立使用XPCOM_第4张图片

 

  • 在【项目属性】 -> 【链接器】 -> 【输入】的【附加依赖项】中添加 "xpcom.lib xul.lib xpcomglue_s.lib nspr4.lib"

 

独立使用XPCOM_第5张图片

 

 

  • 在代码里初始化 XPCOM

 

void init_XPCOM() { #ifdef XPCOM_GLUE XPCOMGlueStartup(nsnull); #endif NS_InitXPCOM2(getter_AddRefs(servMan), nsnull, nsnull ) ; // 加载组件,默认是在当前目录下的components nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan); NS_ASSERTION(registrar, "Null nsIComponentRegistrar"); registrar->AutoRegister(nsnull); //nsCOMPtr<nsIComponentManager> manager = do_QueryInterface(registrar); NS_ASSERTION(registrar, "Null nsIComponentManager"); //return XRE_main(argc, argv, &kAppData); //nsComptr<> } //int _tmain(int argc, _TCHAR* argv[]) int main(int argc, char* argv[]) { //init_XPCOM() ; // XRE_main(argc, argv, &kAppData); // 初始化XPCOM init_XPCOM() ; nsCOMPtr<nsILocalFile> mComponentsDir; //GetLocationFromDirectoryService(NS_XPCOM_COMPONENT_DIR, getter_AddRefs(mComponentsDir)); // 路径操作 NS_NewLocalFile(EmptyString(), PR_TRUE, getter_AddRefs(mComponentsDir)) ; mComponentsDir->InitWithNativePath(nsDependentCString("c://") ) ; // 输出路径 nsEmbedCString pathName; mComponentsDir->GetNativePath(pathName) ; std::cout<< "path: "<<pathName.get() <<std::endl ;; nsCOMPtr<nsIFile> compDir; // GetDirectoryFromDirService(NS_XPCOM_COMPONENT_DIR, getter_AddRefs(compDir) ) ; // 获取XPCOM的一些指定的目录 //NS_XPCOM_COMPONENT_DIR NS_XPCOM_XPTI_REGISTRY_FILE NS_GetSpecialDirectory(NS_XPCOM_COMPONENT_DIR, getter_AddRefs(compDir) ) ; nsCAutoString outPathBuf ; nsAutoString pathBuf; compDir->GetPath(pathBuf) ; outPathBuf = NS_ConvertUTF16toUTF8(pathBuf) ; //NS_ConvertASCIItoUTF16 std::cout<< "NS_XPCOM_COMPONENT_DIR path: "<<outPathBuf.get()<<std::endl; // 获取XPCOM的一些Server nsCOMPtr<nsIObserverService> os = do_GetService("@mozilla.org/observer-service;1"); if(os) { std::cout<<"nsIObserverService ok"<<std::endl ; } else { std::cout<<"nsIObserverService failed"<<std::endl ; } char c ; while( c = getchar() != 'q') { } NS_ShutdownXPCOM(nsnull); #ifdef XPCOM_GLUE XPCOMGlueShutdown(); #endif return 0; }

 

例子代码可在这里下载:http://download.csdn.net/source/1520777

 

你可能感兴趣的:(manager,null,Path,getter,跨平台,mozilla)