COM组件已经部署好了,接下来就是调用了既然我们是部署了COM+服务器,我们这里就讲下怎么远程调用COM组件。

在创建好VC的WIN32项目后,在预编译文件中引用。

  1. #ifndef _WIN32_WINNT    // Allow use of features specific to Windows XP or later.
  2. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
  3. #endif
  4. #include <stdio.h>
  5. #include <tchar.h>
  6. #include <icrsint.h>
  7. #include <iostream>
  8. #include <windows.h>
  9. #import "SayHello.tlb" no_namespace named_guids

#define _WIN32_WINNT 0x0501 //是为了DCOM调用很多函数都有下面的限定,不然不能编译通过了如:

#if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM

#import "SayHello.tlb" no_namespace named_guids  //是将COM组件的定义引用进来

ISayHello接口变为C++的如下定义:

  1. struct __declspec(uuid("c6d664f5-6cf6-4c12-9948-8a40b16818be"))
  2. ISayHello : IDispatch
  3. {
  4. //
  5. // Wrapper methods for error-handling
  6. //
  7. _bstr_t SayHello (
  8. _bstr_t name );
  9. //
  10. // Raw methods provided by interface
  11. //
  12. virtual HRESULT __stdcall raw_SayHello (
  13. /*[in]*/ BSTR name,
  14. /*[out,retval]*/ BSTR * pRetVal ) = 0;
  15. };

调用代码如下:

  1. //初始化COM运行环境,也可以使用CoInitialize但使用COM的每根线程都需要调用
  2. CoInitializeEx(NULL, COINIT_MULTITHREADED);
  3. HRESULT hr;
  4. //为进程(一个进程只需调用一次)注册安全和设置默认安全设置,
  5. //我们上期写的是以匿名方式部署可以不需要这部分
  6. hr = CoInitializeSecurity(NULL, -1, NULL, NULL,RPC_C_AUTHN_LEVEL_NONE,
  7. RPC_C_IMP_LEVEL_ANONYMOUS, NULL, EOAC_NONE, NULL);
  8. //  //设置验证标识信息,我们上期写的是以匿名方式部署不需要这部分
  9. //  COAUTHIDENTITY *pAuthidentity;
  10. //  COAUTHINFO *pAuthInfo;
  11. //  pAuthidentity = (COAUTHIDENTITY*)malloc(sizeof(COAUTHIDENTITY));
  12. //  pAuthidentity->User = (USHORT*)pUser;
  13. //  pAuthidentity->UserLength = strlen(pUser);
  14. //  pAuthidentity->Password = (USHORT*)pPassword;
  15. //  pAuthidentity->PasswordLength = strlen(pPassword);
  16. //  pAuthidentity->Domain = NULL;
  17. //  pAuthidentity->DomainLength = 0;
  18. //  //有时候验证通过UNICODE的方式不要设置错了
  19. //  pAuthidentity->Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
  20. //
  21. //  //验证信息
  22. //  pAuthInfo = (COAUTHINFO*)malloc(sizeof(COAUTHINFO));
  23. //  pAuthInfo->dwAuthnSvc= RPC_C_AUTHN_WINNT;
  24. //  pAuthInfo->dwAuthzSvc= RPC_C_AUTHZ_NONE;
  25. //  pAuthInfo->pwszServerPrincName= NULL;
  26. //  pAuthInfo->dwAuthnLevel= RPC_C_AUTHN_LEVEL_NONE;
  27. //  pAuthInfo->dwImpersonationLevel= RPC_C_IMP_LEVEL_IMPERSONATE;
  28. //  pAuthInfo->dwCapabilities= RPC_C_QOS_CAPABILITIES_DEFAULT;
  29. //  pAuthInfo->pAuthIdentityData= pAuthidentity;
  30. //远程服务器信息
  31. COSERVERINFO ServerInfo={0, L"192.168.0.200", NULL/*pAuthInfo*/, 0};
  32. MULTI_QI MultiQi={ IID_ISayHello, NULL, NOERROR };
  33. ISayHello *pSayHello;
  34. //创建DCOM对象返回接口指针
  35. hr = CoCreateInstanceEx(CLSID_CSayHello, NULL, CLSCTX_REMOTE_SERVER, &ServerInfo, 1, &MultiQi);
  36. if(FAILED(hr)) return;
  37. *pSayHello = (ISayHello*)MultiQi.pItf;
  38. //为DCOM对象指针设置反问安全令牌
  39. hr = CoSetProxyBlanket(*ppUnknown, RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_NONE, NULL,
  40. RPC_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_ANONYMOUS, NULL/*pAuthidentity*/, EOAC_NONE);
  41. BSTR userName = SysAllocString(L"test");
  42. BSTR retVal;
  43. //调用DCOM接口
  44. hr = pSayHello->raw_SayHello(userName, &retVal);
  45. //释放DCOM接口
  46. pSayHello->Release();
  47. //释放COM运行环境
  48. CoUninitialize();

COM与.NET调用DCOM组件相关推荐

  1. php word组件使用方法,快速解决PHP调用Word组件DCOM权限的问题讲解

    下面小编就为大家分享一篇快速解决PHP调用Word组件DCOM权限的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1. 首先必须要在电脑上安装 Office 2. window ...

  2. php 开启dcom,快速解决PHP调用Word组件DCOM权限的问题讲解

    下面小编就为大家分享一篇快速解决PHP调用Word组件DCOM权限的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1. 首先必须要在电脑上安装 Office 2. window ...

  3. PHP IIS DCOM,快速解决PHP调用Word组件DCOM权限的问题

    1. 首先必须要在电脑上安装 Office 2. windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> 双击 计算机 ==> 双击 我的电脑 = ...

  4. php word权限,快速解决PHP调用Word组件DCOM权限的问题

    快速解决PHP调用Word组件DCOM权限的问题 1. 首先必须要在电脑上安装 Office 2. windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> ...

  5. php com word,php 调用 com组件,进行word操作,详情步骤

    步骤一.php开启COM组件 查看php.ini中是否已经开启了com.allow_dcom = true 从php/ext/里面查找一下有没有这个php_com_dotnet.dll这个文件 如果没 ...

  6. 64位windows系统如何显示32位dcom组件配置

    在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Microsoft Excel程序,这主要是64位系统的问题,excel是32位的组件,所以在正常的系统组件服务里是看不到的 ...

  7. php 无法创建com组件,关于IIS php调用com组件的权限问题

    关于IIS php调用com组件的权限问题 1.运行Dcomcnfg.exe 2.组件服务――计算机――我的电脑 ――DCOM配置――找到microsoft word 文档 3.点击属性 4.选择&q ...

  8. Delphi创建COM组件并分别用Delphi和html调用该组件的简单实例

    一.功能介绍及效果图 用delphi xe6 创建一个简单的COM组件,并分别测试了用delphi和HTML调用该组件的方法ShowWuXiaNames.效果图如下: 图一:在Windows中注册的C ...

  9. 基于COM/DCOM组件技术的Web-based多媒体教学软件的设计

    摘要] 本文通过分析COM/DCOM组件技术以及Web-based交互式多媒体教学软件的特点,提出了基于组件技术的Web-based多媒体教学软件模型,并着重讨论了COM/DCOM技术在实现Web-b ...

最新文章

  1. java.lang中所有的类_java.lang中的数学类
  2. QTime使用中遇到的”not enough actual parameters for macro 'min'“问题
  3. Vue学习(一)-邂逅Vuejs
  4. 代码逻辑分析_入行数据分析师不得不看的10本书
  5. SettingsPLSQLDeveloper
  6. 回顾国产手机4年沉浮,仍然只是靠这三招翻身
  7. PHP中预定义的超全局数组
  8. 使用HTML5实现刮刮卡效果
  9. 基于JAVA+SpringMVC+MYSQL的排班管理系统
  10. 一加10 Pro的性能配置还是非常不错的
  11. spyder python_spyder python2.7下载
  12. 强化学习基础入门级介绍
  13. 【愚公系列】华为云GaussDB(for Redis)的体验流程|【这次高斯不是数学家】
  14. yarn安装依赖时出现错误(2种解决方法)Integrity check failed for “antd“ computed integrity doesn‘t match our records)
  15. ASURO机器人电机干扰造成MCU误报电量低(LVLV)问题
  16. c语言坐标画折线,如何用C语言画折线图
  17. TP-LINK TL-WDN7200H ubuntu18.04驱动安装
  18. uniapp 收藏功能实现及组件封装
  19. 云南大学软件测试,云南大学《软件测试》软件测试期末报告.pdf
  20. 物联网通信技术原理第5章 移动通信技术

热门文章

  1. 怎样在线把别人web前端代码抓下_自学web前端8个月,我是怎样拿下7K薪资的?
  2. 【opencv】20.直方图均衡化的数学原理
  3. 2016年科技阅读列表
  4. 局部图像特征描述概述
  5. matlab显示的图片,手动保存时四周有白边
  6. 编程之美-构造数独方法整理
  7. Docker技术实践——中级篇
  8. URAL 1635 Mnemonics and Palindromes
  9. BEC listen and translation exercise 26
  10. Geth的命令行介绍