VC++ : GetIDsOfNames 调用失败,获取的dispid为-1

  今天调试自己的程序,需要调用一个COM组件中的方法,利用GetIDsOfNames获取调用函数对象的DISPID。

  GetIDsOfNames:
    把COM接口的方法名字和参数(可选)映射成一组DISPID。

  GetIDsOfNames(
    /* [in] */ REFIID riid,
    /* [size_is][in] */ LPOLESTR *rgszNames,
    /* [in] */ UINT cNames,
    /* [in] */ LCID lcid,
    /* [size_is][out] */ DISPID *rgDispId)

  代码片段如下:

DISPID PropertyID[1] = {0};
BSTR PropName[1];
PropName[0] = SysAllocString(L"ExtractString");
HRESULT hResult = lpDispatch->GetIDsOfNames(IID_NULL, PropName, 3, LOCALE_SYSTEM_DEFAULT, PropertyID);
DWORD dRet = GetLastError();

  运行结果:PropertyID 为 -1,GetLastError返回14007

  查了查资料,终于找到原因了:COM组件未注册的缘故!

  regsvr32 *.ocx即可!


  

时间: 2024-10-05 22:40:17

VC++ : GetIDsOfNames 调用失败,获取的dispid为-1的相关文章

VC和LUA混合开发之VC程序调用Lua脚本函数

http://www.cnblogs.com/clever101/archive/2010/04/14/1712207.html 作者:朱金灿 来源:http://www.cnblogs.com/clever101/ Lua语言以其卓越的可扩展性.简单.高效率和与平台无关性在游戏领域得到广泛应用.今天花了一些时间学习VC和Lua如何混合开发,编写了一个小例程,和大家分享一下这方面的经验. 首先在http://www.lua.org/ftp/下载Lua的最新版本:lua-5.1.4.然后用VS C

VC++中调用MATLAB中的数据

网上的帖子都是如何将VC++数据添加进入MATLAB中,而VC++调用MATLAB中的数据几乎没有,再次记录一点东西吧 配置好编程环境,本文环境为:VS2012+MATLAB2012b. 首先要了解的是Matlab Engine API函数 接下来贴代码和效果: void test2() { Engine *ep; if (!(ep = engOpen(NULL))) { cout<<"Can't start MATLAB engine"<<endl; //Me

Sql Server远程调用失败

这篇文章主要为大家介绍了SQL server服务显示远程过程调用失败的解决方法,还为大家提供了解决SQL SERVER 2008 R2配置管理器出现"远程过程调用失败"(0x800706be)错误提示的方案,感兴趣的小伙伴们可以参考一下 刚刚打开SQL Server 2008,想要新建一个数据库,却发现出现了一个问题,这个问题由于之前没有遇到过,所以下面整理解决SQL server服务远程调用失败的几个方法,供大家参考,具体内容如下 先看看出现的问题: 出现上面这个错误的原因可能是由于

解决安装不同版本office后造成的PIA COM组件调用失败

症状:TF400422, TF400423, TF400424: Failed to open in Microsoft Excel (Project, Outlook): Unable to cast COM object of type 'Microsoft.Office.Interop.Excel(Project, Outlook).ApplicationClass' to interface type 'Microsoft.Office.Interop.Excel._Applicatio

Android调用gallery获取图片

从gallery中获取图片 步骤: 步骤一: // 激活系统图库应用,选择一张图片 Intent intent = new Intent(); // 活动操作:选择一个项目从数据,返回被选中 intent.setAction(Intent.ACTION_PICK); // 设置意图的类型 intent.setType("image/*"); // 设置开启意图 // 设置的是有返回值的意图开启需要重写onActivityResult startActivityForResult(int

DllRegisterServer的调用失败的问题解决方法

今天安装歌词转换器的时候需要安装COMDLG32.OCX,在注册ActiveX控件时出错了, 错误提示是COMDLG32.OCX.ocx已加载,但是DllRegisterServer调用失败.其实在日常的工作中,用regsvr32 命令注册dll.ocx等时,这种模块已加载,但DllRegisterServer的调用失败的问题很常见,下面和大家分享一下我的经验,希望能够帮到大家. 方法/步骤 这种提示一般都是因为我们的权限不够造成的. 我的操作系统是win8 64位的,所有我就用我的系统和大家分

性能优化之——.NET(C#)调用webService获取客户端IP地址所属区域(异步回调)(二)

朋友们这次分享的是异步回调不是异步调用哦! 请注意喽! 功能描述,接口地址,方法名称以及参数说明,同上篇:.NET(C#)调用webService获取客户端IP地址所属区域(非异步)(一)(LZ比较懒,不想写太多哦!(⊙0⊙)) 实现代码如下: 1 namespace main 2 { 3 class Program 4 { 5 public static string Result = string.Empty; 6 7 static void Main(string[] args) 8 {

vs自动生成的WebService配置文件在部署到IIs6后,服务调用失败的解决方法

近日,在项目中需要引用java发布的WebService,添加服务引用后,调用一切正常. 配置如下: <system.serviceModel> <bindings> <basicHttpBinding> <binding name="SecurityServiceImplServiceSoapBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize=&qu

"最大工作进程数"导致的WCF调用失败

WCF服务寄宿在IIS中,当设置其"最大工作进程数"为2时,经常会出现服务无法被成功调用,具体异常信息如下: Type:System.ServiceModel.Security.MessageSecurityException Message:从另一方收到未进行安全处理或安全处理不正确的错误.有关错误代码和详细信息,请参见内部 FaultException. HelpLink: Source:System.ServiceModel.Internals TargetSite:TAsync