COM与.NET调用DCOM组件
COM组件已经部署好了,接下来就是调用了既然我们是部署了COM+服务器,我们这里就讲下怎么远程调用COM组件。
在创建好VC的WIN32项目后,在预编译文件中引用。
- #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
- #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
- #endif
- #include <stdio.h>
- #include <tchar.h>
- #include <icrsint.h>
- #include <iostream>
- #include <windows.h>
- #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++的如下定义:
- struct __declspec(uuid("c6d664f5-6cf6-4c12-9948-8a40b16818be"))
- ISayHello : IDispatch
- {
- //
- // Wrapper methods for error-handling
- //
- _bstr_t SayHello (
- _bstr_t name );
- //
- // Raw methods provided by interface
- //
- virtual HRESULT __stdcall raw_SayHello (
- /*[in]*/ BSTR name,
- /*[out,retval]*/ BSTR * pRetVal ) = 0;
- };
调用代码如下:
- //初始化COM运行环境,也可以使用CoInitialize但使用COM的每根线程都需要调用
- CoInitializeEx(NULL, COINIT_MULTITHREADED);
- HRESULT hr;
- //为进程(一个进程只需调用一次)注册安全和设置默认安全设置,
- //我们上期写的是以匿名方式部署可以不需要这部分
- hr = CoInitializeSecurity(NULL, -1, NULL, NULL,RPC_C_AUTHN_LEVEL_NONE,
- RPC_C_IMP_LEVEL_ANONYMOUS, NULL, EOAC_NONE, NULL);
- // //设置验证标识信息,我们上期写的是以匿名方式部署不需要这部分
- // COAUTHIDENTITY *pAuthidentity;
- // COAUTHINFO *pAuthInfo;
- // pAuthidentity = (COAUTHIDENTITY*)malloc(sizeof(COAUTHIDENTITY));
- // pAuthidentity->User = (USHORT*)pUser;
- // pAuthidentity->UserLength = strlen(pUser);
- // pAuthidentity->Password = (USHORT*)pPassword;
- // pAuthidentity->PasswordLength = strlen(pPassword);
- // pAuthidentity->Domain = NULL;
- // pAuthidentity->DomainLength = 0;
- // //有时候验证通过UNICODE的方式不要设置错了
- // pAuthidentity->Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
- //
- // //验证信息
- // pAuthInfo = (COAUTHINFO*)malloc(sizeof(COAUTHINFO));
- // pAuthInfo->dwAuthnSvc= RPC_C_AUTHN_WINNT;
- // pAuthInfo->dwAuthzSvc= RPC_C_AUTHZ_NONE;
- // pAuthInfo->pwszServerPrincName= NULL;
- // pAuthInfo->dwAuthnLevel= RPC_C_AUTHN_LEVEL_NONE;
- // pAuthInfo->dwImpersonationLevel= RPC_C_IMP_LEVEL_IMPERSONATE;
- // pAuthInfo->dwCapabilities= RPC_C_QOS_CAPABILITIES_DEFAULT;
- // pAuthInfo->pAuthIdentityData= pAuthidentity;
- //远程服务器信息
- COSERVERINFO ServerInfo={0, L"192.168.0.200", NULL/*pAuthInfo*/, 0};
- MULTI_QI MultiQi={ IID_ISayHello, NULL, NOERROR };
- ISayHello *pSayHello;
- //创建DCOM对象返回接口指针
- hr = CoCreateInstanceEx(CLSID_CSayHello, NULL, CLSCTX_REMOTE_SERVER, &ServerInfo, 1, &MultiQi);
- if(FAILED(hr)) return;
- *pSayHello = (ISayHello*)MultiQi.pItf;
- //为DCOM对象指针设置反问安全令牌
- hr = CoSetProxyBlanket(*ppUnknown, RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_NONE, NULL,
- RPC_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_ANONYMOUS, NULL/*pAuthidentity*/, EOAC_NONE);
- BSTR userName = SysAllocString(L"test");
- BSTR retVal;
- //调用DCOM接口
- hr = pSayHello->raw_SayHello(userName, &retVal);
- //释放DCOM接口
- pSayHello->Release();
- //释放COM运行环境
- CoUninitialize();
COM与.NET调用DCOM组件相关推荐
- php word组件使用方法,快速解决PHP调用Word组件DCOM权限的问题讲解
下面小编就为大家分享一篇快速解决PHP调用Word组件DCOM权限的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1. 首先必须要在电脑上安装 Office 2. window ...
- php 开启dcom,快速解决PHP调用Word组件DCOM权限的问题讲解
下面小编就为大家分享一篇快速解决PHP调用Word组件DCOM权限的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1. 首先必须要在电脑上安装 Office 2. window ...
- PHP IIS DCOM,快速解决PHP调用Word组件DCOM权限的问题
1. 首先必须要在电脑上安装 Office 2. windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> 双击 计算机 ==> 双击 我的电脑 = ...
- php word权限,快速解决PHP调用Word组件DCOM权限的问题
快速解决PHP调用Word组件DCOM权限的问题 1. 首先必须要在电脑上安装 Office 2. windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> ...
- php com word,php 调用 com组件,进行word操作,详情步骤
步骤一.php开启COM组件 查看php.ini中是否已经开启了com.allow_dcom = true 从php/ext/里面查找一下有没有这个php_com_dotnet.dll这个文件 如果没 ...
- 64位windows系统如何显示32位dcom组件配置
在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Microsoft Excel程序,这主要是64位系统的问题,excel是32位的组件,所以在正常的系统组件服务里是看不到的 ...
- php 无法创建com组件,关于IIS php调用com组件的权限问题
关于IIS php调用com组件的权限问题 1.运行Dcomcnfg.exe 2.组件服务――计算机――我的电脑 ――DCOM配置――找到microsoft word 文档 3.点击属性 4.选择&q ...
- Delphi创建COM组件并分别用Delphi和html调用该组件的简单实例
一.功能介绍及效果图 用delphi xe6 创建一个简单的COM组件,并分别测试了用delphi和HTML调用该组件的方法ShowWuXiaNames.效果图如下: 图一:在Windows中注册的C ...
- 基于COM/DCOM组件技术的Web-based多媒体教学软件的设计
摘要] 本文通过分析COM/DCOM组件技术以及Web-based交互式多媒体教学软件的特点,提出了基于组件技术的Web-based多媒体教学软件模型,并着重讨论了COM/DCOM技术在实现Web-b ...
最新文章
- java.lang中所有的类_java.lang中的数学类
- QTime使用中遇到的”not enough actual parameters for macro 'min'“问题
- Vue学习(一)-邂逅Vuejs
- 代码逻辑分析_入行数据分析师不得不看的10本书
- SettingsPLSQLDeveloper
- 回顾国产手机4年沉浮,仍然只是靠这三招翻身
- PHP中预定义的超全局数组
- 使用HTML5实现刮刮卡效果
- 基于JAVA+SpringMVC+MYSQL的排班管理系统
- 一加10 Pro的性能配置还是非常不错的
- spyder python_spyder python2.7下载
- 强化学习基础入门级介绍
- 【愚公系列】华为云GaussDB(for Redis)的体验流程|【这次高斯不是数学家】
- yarn安装依赖时出现错误(2种解决方法)Integrity check failed for “antd“ computed integrity doesn‘t match our records)
- ASURO机器人电机干扰造成MCU误报电量低(LVLV)问题
- c语言坐标画折线,如何用C语言画折线图
- TP-LINK TL-WDN7200H ubuntu18.04驱动安装
- uniapp 收藏功能实现及组件封装
- 云南大学软件测试,云南大学《软件测试》软件测试期末报告.pdf
- 物联网通信技术原理第5章 移动通信技术