2 cetcet8 CETCET8 于 2014.12.18 14:43 提问

c++调用自己编写的ocx库文件失败原因

#include
#include
#include "../last/LAST.h"
#include "../last/LAST_i.c"

void main(void)
{
// 声明一个HRESULT变量以及一个Simple_ATL接口的指针
IMyClass *IMyClass = NULL;

HRESULT hr = CoInitialize(NULL); // 初始化COM

// 现在初始化COM
hr = CoInitialize(0);
// 使用SUCCEEDED宏来看看我们是否能够获得接口的指针
if(SUCCEEDED(hr))
{
    hr = ::CoCreateInstance( CLSID_MyClass, //Com对象标识符
        NULL,                 //指向接口IUnknown指针
        CLSCTX_INPROC_SERVER, //运行可执行代码上下文
        IID_IMyClass,         //Com对象接口标识符
        (void**)&IMyClass);   //用来接收指向Com对象接口地址指针变量

    if(SUCCEEDED(hr))
    {
        int ReturnValue;
        IMyClass->AddNumber(5, 7, &ReturnValue);
        cout << "The answer for 5 + 7 is: " 
            << ReturnValue << endl;
        IMyClass->Release(); 
    }
    else
    {
        cout<<"--------- hr = "<<hr<<endl;
        cout << "CoCreateInstance Failed." << endl;
    }

     // 释放COM
    CoUninitialize();


}
else
{
    cout << "CoInitialize Failed." << endl;
}

}

运行的时候会返回失败"CoCreateInstance Failed." ,hr = -2147024770

这个是啥原因啊?

4个回答

devmiao
devmiao   Ds   Rxr 2014.12.18 18:34

只能知道你的com类的构造函数出错,具体你要调试下你的com对象。

lx624909677
lx624909677   Ds   Rxr 2014.12.18 14:49

GetLastError看下返回值是多少。

wangyaninglm
wangyaninglm   Ds   Rxr 2014.12.19 12:40

单步调试,看看错误信息,贴上来看看

CETCET8
CETCET8   2014.12.19 13:43

测试了下,这个程序是正常的,问题还是在于ocx库的封装的问题,多谢各位了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
编写浏览器使用的OCX全过程
<br />随着互联网的飞速发展,现在的人们都习惯了打开浏览器进行工作,基于WEB的程序蜂拥而至,几乎变得无所不能。由于WEB脚本语言的限制,对于本地计算机的访问受到很大的限制。开发WEB的程序员都会因为WEB的打印而烦恼,对于WEB开发者来讲,更大的挑战还在后面。电子商务需要身份认证,需要访问本地计算机上操作人员的U-KEY, 还有诸如此类的读卡器、扫描仪等外围输入设备。<br />  这所有的一切困难都可以用基于ACTIVEX技术的OCX组件来解决。OCX的编写并不难,下面就讲解基于VC6环境下OCX的
C调用自己写的动态库
自己做了libhello.so库后,写了个简单的测试代码,将测试代码和库文件放到了同一路径下,$gcc main.c -L. -lhello,结果运行后报错,./a.out: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory 以下
c++开发ocx入门实践一
c++开发ocx入门实践一              IDE:vs2010,c++,测试工具,vs自带的TstCon.exe(在D:\Program Files (x86)\Microsoft Visual Studio10.0\Samples\2052\VC2010Samples\C++\MFC\ole\TstCon\Debug下,没有的话编译一下工程,就会生成) 。
在win7 64位系统下用vs建立ocx出错
在win7 64位系统下用vs建立ocx出现 “检测该模块是否与regsvr32.exe的x86或x64版本兼容的问题主要是由于在打开vs的时候没有用管理员权限打开。用管理员权限打开一切都ok了,亲身经历,很多网上说的都不对。
vsflex8.ocx已加载,但对DLLREGISTERSERVER的调用失败
在64bit的电脑上加载COMponentOne VSFlexGrid 8.0 一直不成功。原来以为是不支持64bit系统所致。在找到某网页才知道:8.0版本支持64bit系统。问题不在此。       再仔细看弹出的警示窗口内容:“vsflex8.ocx已加载,但对DLLREGISTERSERVER的调用失败......”。度娘后,有网页说:“点击: 开始——程序 - 附件 - 命令提示符,在
C++编写ActiveX ocx控件在网页中调用失败问题
需要实现IObjectSafety接口  打“开工程名Ctl.h”在最上面添加     #include          在类中的DECLARE_DYNCREATE(C工程名Ctrl)下面添加以下代码,         DECLARE_INTERFACE_MAP()              BEGIN_INTERFACE_PART(ObjSafe, IObje
如何将自己的c文件做出静态库lib
有一些代码,我们编程时经常用到,或者我们对某些部分很熟悉,并写出了一些可用的接口。这时,我们会考虑把这些c文件做成一个lib库,以方便自己使用,或这给别人调用。   我这里介绍下在vc++6.0下如何来制作静态库: 第一步:创建一个工程,选择Win32Static Library,输入工程名。这时就创建好了。   第二步:工程创建好了,再点击新建,这时选择
【c++】C++编写OCX控件
使用C++ 编写OCX控件,并在C# Winform中使用
VC++创建并调用Ocx控件
我们写一个加法例子Ocx控件. 首先打开VC,我们建立一个MFC ActiveX ControlWizard工程 切换到类视图 选中_DActiveX,右击选择Add Method 弹出如下对话框,填入相应的参数 再次打开类视图,会发现_DActiveX接口里多出了Add接口, 且CActiveXCtrl类里面发现函数Add(short num1,short num2)双
ocx控件注册失败常见问题
注册及卸载: regsvr32 name.ocx                 //注册name.ocx控件 regsvr32 /u name.ocx             //解除name.ocx控件的注册   一、        error MSB8011: Failed to registeroutput. Please try enabling Per-user Redirec