CoInitializeEx,PreProcessor definitions => 加上,_WIN32_DCOM

*** C2039: 'CoInitializeEx' : is not a member of '`global namespace'' ****

楼主sydt(亲情六处) 2006-06-14 17:55:52 在 VC/MFC / 基础类 提问

VC6   程序中调用   CoInitializeEx函数  
  编译错误如下  
  D:/NicOPCServer/ServerClient/MainFrm.cpp(199)   :   error   C2039:   'CoInitializeEx'   :   is   not   a   member   of   '`global   namespace''  
   
  产生错误的CPP已经包含相关头文件了,查了相关帖子,未解决!  
  //   MainFrm.cpp   :   implementation   of   the   CMainFrame   class  
  //  
   
  #ifndef   _WIN32_DCOM  
    #define   _WIN32_DCOM     //   WinNT   4.0   or   Win95   w/DCOM  
  #endif  
  #define   _WIN32_WINNT   0x0500  
  #include   <ole2.h>  
   
  #include   "stdafx.h"  
  #include   <objbase.h>  
  #include   <atlbase.h>  
  大家帮忙!  
  问题点数:60、回复次数:10Top

src="http://topic.youkuaiyun.com/Include/Board.htm?Tags=" frameborder="0" scrolling="no">

1 楼seu07201213(【_】〖汪洋中的一片叶子〗≈^︵^≈)回复于 2006-06-14 18:06:45 得分 10

Project=>Settings=>C/C++=>PreProcessor   definitions   =>   加上,_WIN32_DCOMTop

2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-06-14 21:49:40 得分 30

#ifndef   _WIN32_DCOM  
  #define   _WIN32_DCOM   //   WinNT   4.0   or   Win95   w/DCOM  
  #endif  
  #define   _WIN32_WINNT   0x0500  
   
   
  这些代码写在stdafx.h中?Top

3 楼sydt(亲情六处)回复于 2006-06-15 12:41:25 得分 0

To:seu07201213(汪洋中的一片叶子),Project=>Settings=>C/C++=>PreProcessor   definitions   =>   加上,_WIN32_DCOM  
  d:/nicopcserver/serverclient/mainfrm.cpp(5)   :   warning   C4005:   '_WIN32_DCOM'   :   macro   redefinition  
  ...  
   
  To:DentistryDoctor(MVP称号也不能顶上缺失的文凭(厚积薄发))    
  上述代码写在用到的API函数的CPP文件的前面。  
  我在一个已有的工程中增加一个和COM相关的操作,引入一些代码,编译错误!  
  D:/NicOPCServer/ServerClient/MainFrm.cpp(199)   :   error   C2039:   'CoInitializeEx'   :   is   not   a   member   of   '`global   namespace''  
  ...  
  帮忙!!!Top

4 楼seu07201213(【_】〖汪洋中的一片叶子〗≈^︵^≈)回复于 2006-06-15 12:55:43 得分 20

既然macro   redefinition,就把mainfrm.cpp(5)   那段去掉吧。。Top

5 楼sydt(亲情六处)回复于 2006-06-15 13:05:23 得分 0

To:seu07201213(汪洋中的一片叶子)    
  我试试!!!Top

6 楼sydt(亲情六处)回复于 2006-06-15 15:55:14 得分 0

To:DentistryDoctor(MVP称号也不能顶上缺失的文凭(厚积薄发))    
  现在编译到时通过了,但  
  //   COM   initialize  
  hr   =   ::CoInitializeEx(NULL,COINIT_MULTITHREADED);   //   setup   COM   lib  
  //   new  
  if   (hr   !=   S_OK)  
  { if   (hr   ==   S_FALSE)  
  {  
  MessageBox(NULL,   "COM库已经初始化",   "COM   Error",   MB_OK);  
  }  
  else  
  {  
  MessageBox(NULL,   "COM库初始化失败",   "COM   Error",   MB_OK); //   当前产生错误流程  
                                                        //   ??????     2006.06.15    
  }  
  }  
  运行产生错误!!! Top

7 楼sydt(亲情六处)回复于 2006-06-15 17:46:34 得分 0

hr   =   ::CoInitializeEx(NULL,   COINIT_APARTMENTTHREADED);  
  运行可以成功!  
      COINIT_APARTMENTTHREADED   =   0x2,     //   Apartment   model  
      COINIT_MULTITHREADED           =   0x0,     //   OLE   calls   objects   on   any   thread.  
  区别是什么?Top

8 楼bbs008()回复于 2006-06-19 14:01:31 得分 0

看看有关com的书籍就知道了。Top

9 楼sydt(亲情六处)回复于 2006-06-19 15:07:04 得分 0

TO:bbs008()   帮忙分析一下  
  //   COM   initialize  
  hr   =   ::CoInitializeEx(NULL,COINIT_MULTITHREADED);   //   setup   COM   lib  
  用这个参数:COINIT_MULTITHREADED初始化失败的原因么?Top

10 楼sydt(亲情六处)回复于 2006-06-22 13:30:53 得分 0

问题转移了!!  
  感谢大家!!!  
 
// 检查任务是否存在 bool TaskExists(const wchar_t* taskName) { HRESULT hr = S_OK; bool exists = false; CoInitializeEx(NULL, COINIT_MULTITHREADED); ITaskService* pService = NULL; hr = CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (LPVOID*)&pService); if (SUCCEEDED(hr)) { hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t()); if (SUCCEEDED(hr)) { ITaskFolder* pRootFolder = NULL; hr = pService->GetFolder(_bstr_t(L"\\"), &pRootFolder); if (SUCCEEDED(hr)) { IRegisteredTask* pTask = NULL; hr = pRootFolder->GetTask(_bstr_t(taskName), &pTask); if (SUCCEEDED(hr)) { exists = true; pTask->Release(); } else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { exists = false; } else { ShowError(L"获取任务信息失败", hr); } pRootFolder->Release(); } } pService->Release(); } CoUninitialize(); return exists; } // 修改参数类型为 char* 和 std::string // 修改参数类型为 char* 和 std::string bool CreateStartupTask(char* taskName, std::string appPath) { // 将输入参数转换为宽字符 std::wstring wTaskName = AnsiToWide(taskName); std::wstring wAppPath = StringToWide(appPath); // 首先检查任务是否存在 if (TaskExists(wTaskName.c_str())) { //MessageBoxW(NULL, L"任务已存在,无需创建", L"信息", MB_ICONINFORMATION); return true; } HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); if (FAILED(hr)) { //ShowError(L"初始化COM库失败", hr); return false; } hr = CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, 0, NULL ); if (FAILED(hr) && hr != RPC_E_TOO_LATE) { //ShowError(L"初始化安全库失败", hr); CoUninitialize(); return false; } ITaskService* pService = NULL; hr = CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (LPVOID*)&pService); if (FAILED(hr)) { //ShowError(L"创建任务计划服务实例失败", hr); CoUninitialize(); return false; } hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t()); if (FAILED(hr)) { //ShowError(L"连接到任务计划服务失败", hr); pService->Release(); CoUninitialize(); return false; } ITaskFolder* pRootFolder = NULL; hr = pService->GetFolder(_bstr_t(L"\\"), &pRootFolder); if (FAILED(hr)) { //ShowError(L"获取根文件夹失败", hr); pService->Release(); CoUninitialize(); return false; } // 删除已存在的任务 (虽然我们已经检查过,但还是做一次以防万一) hr = pRootFolder->DeleteTask(_bstr_t(wTaskName.c_str()), 0); if (FAILED(hr) && hr != HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { //ShowError(L"删除现有任务失败", hr); } // 创建新任务 ITaskDefinition* pTask = NULL; hr = pService->NewTask(0, &pTask); if (FAILED(hr)) { //ShowError(L"创建新任务失败", hr); pRootFolder->Release(); pService->Release(); CoUninitialize(); return false; } // 设置任务注册信息 IRegistrationInfo* pRegInfo = NULL; hr = pTask->get_RegistrationInfo(&pRegInfo); if (SUCCEEDED(hr)) { pRegInfo->put_Author(_bstr_t(L"Your Company")); pRegInfo->Release(); } // 设置任务主体 ITaskSettings* pSettings = NULL; hr = pTask->get_Settings(&pSettings); if (SUCCEEDED(hr)) { pSettings->put_StartWhenAvailable(VARIANT_TRUE); pSettings->put_RunOnlyIfNetworkAvailable(VARIANT_FALSE); pSettings->put_DisallowStartIfOnBatteries(VARIANT_FALSE); pSettings->put_StopIfGoingOnBatteries(VARIANT_FALSE); pSettings->Release(); } // 创建登录触发器 ITriggerCollection* pTriggerCollection = NULL; hr = pTask->get_Triggers(&pTriggerCollection); if (SUCCEEDED(hr)) { ITrigger* pTrigger = NULL; hr = pTriggerCollection->Create(TASK_TRIGGER_LOGON, &pTrigger); if (SUCCEEDED(hr)) { ILogonTrigger* pLogonTrigger = NULL; hr = pTrigger->QueryInterface(IID_ILogonTrigger, (LPVOID*)&pLogonTrigger); if (SUCCEEDED(hr)) { pLogonTrigger->put_Id(_bstr_t(L"LogonTrigger")); pLogonTrigger->put_UserId(_bstr_t(L"")); // 当前用户 pLogonTrigger->Release(); } pTrigger->Release(); } pTriggerCollection->Release(); } // 创建操作 IActionCollection* pActionCollection = NULL; hr = pTask->get_Actions(&pActionCollection); if (SUCCEEDED(hr)) { IAction* pAction = NULL; hr = pActionCollection->Create(TASK_ACTION_EXEC, &pAction); if (SUCCEEDED(hr)) { IExecAction* pExecAction = NULL; hr = pAction->QueryInterface(IID_IExecAction, (LPVOID*)&pExecAction); if (SUCCEEDED(hr)) { pExecAction->put_Path(_bstr_t(wAppPath.c_str())); pExecAction->Release(); } pAction->Release(); } pActionCollection->Release(); } // 注册任务 IRegisteredTask* pRegisteredTask = NULL; hr = pRootFolder->RegisterTaskDefinition( _bstr_t(wTaskName.c_str()), pTask, TASK_CREATE_OR_UPDATE, _variant_t(), // 空用户名 = 当前用户 _variant_t(), // 空密码 = 当前用户 TASK_LOGON_INTERACTIVE_TOKEN, _variant_t(L""), &pRegisteredTask); if (FAILED(hr)) { //ShowError(L"注册任务失败", hr); } else { //MessageBoxW(NULL, L"成功创建登录启动任务", L"信息", MB_ICONINFORMATION); pRegisteredTask->Release(); } pTask->Release(); pRootFolder->Release(); pService->Release(); CoUninitialize(); return SUCCEEDED(hr); } 修改代码绕过QVM360检测 不要修改原有变量
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值