• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > com的初级问题

com的初级问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了com 检查失败问题,dr.com常见问题,dr.com问题,com问题,网校233com初级会计等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: com 的初级问题
描述:

新建的win 32 DLL,里头就一个 Add 函数
其他就是接口的实现以及
        DllGetClassObject
        DllCanUnloadNow    
        DllRegisterServer
        DllUnregisterServer
等四个函数的实现。
通过vc创建的工程(代码如下)能调用,但在 vb 中却无法找到该 COM 对象。是不是还需要实现什么呢?
多谢!
#include <Windows.h>
#include <stdio.h>
#include <initguid.h>
// {64CA0230-BF36-4ec4-836A-45B5FB69CD7A}
DEFINE_GUID(IID_IMath, 
0x64ca0230, 0xbf36, 0x4ec4, 0x83, 0x6a, 0x45, 0xb5, 0xfb, 0x69, 0xcd, 0x7a);
class IMath : public IUnknown
{
public:
  STDMETHOD(Add)(long, long, long*) PURE;
  //STDMETHOD(Subtract)(long, long, long*) PURE;
  //STDMETHOD(Multiply)(long, long, long*) PURE:
  //STDMETHOD(Divide)(long, long, long*) PURE;
};
int main(int argc, char* argv[])
{
  CLSID clsid;
  IClassFactory * pCF;
  CoInitialize(NULL);
  /*
  -2147221008 转成16进制是0x800401f0 
  这是一个系统错误,用Error Lookup察看显示: 尚未调用 CoInitialize。 
  解决的办法是在初始化时调用CoInitialize。
  */
  HRESULT hr = CLSIDFromProgID(L"Test1.Math.1", &clsid);
  if(FAILED(hr))
  {
    printf("1\n");
    return -1;
  }
  hr = CoGetClassObject(clsid, CLSCTX_INPROC, NULL, IID_IClassFactory, (void**)&pCF);
  if(FAILED(hr))
  {
    printf("%d\n", hr);
    printf("2\n");
    return -1;
  }
  IUnknown* pUnk;
  hr = pCF->CreateInstance(NULL, IID_IUnknown, (void**)&pUnk);
  if(FAILED(hr))
  {
    printf("3\n");
    return -1;
  }
  pCF->Release();
  IMath* pMath = NULL;
  hr = pUnk->QueryInterface(IID_IMath, (void**)&pMath);
  if(FAILED(hr))
  {
    printf("4\n");
    return -1;
  }
  pUnk->Release();
  long result;
  pMath->Add(100, 8, &result);
  printf("%d\n", result);
  pMath->Release();
  return 0;
}


解决方案1:

在vb添加控件中找到你自己注册的控件,选择添加就可以添加到你的工程,在按你上面的办法试一下。

解决方案2:

http://www.vckbase.com/document/viewdoc/?id=1501
建议好好看一下,这一系列的文章.你是个MM吧?? 呵呵~~~~~~~

解决方案3:

你的DLL库有注册么?编译完成后,执行一下:Tools=>Register Control.
然后在OleView中查看,Just try.

解决方案4:

在vb环境中, 点菜单project->References, 在出现的窗口中, 选择你自己的组件.

解决方案5:

在vb中调用需要从idispatch继承的双接口才行吧。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • COM问题,帮我看看
  • 初次使用COM,有编译链接问题请大家帮忙。
  • com的注册问题
  • 关于COM问题
  • COM注册失败问题
  • 修改COM属性问题
  • 关于COM的参数类型问题
  • 用COM的问题
  • 几个COM的问题,头疼中
  • COM事件,多线程问题?

相关文章

  • 2017-06-04 ActiveX问题,微软专家请进<-------------急
  • 2017-06-05 网页调用OCX空间中的接口函数异常
  • 2017-06-05 急!!!谁能帮我看看呢?dll中对话框消息循环问题。
  • 2017-06-05 怎样获取DLL文件函数的参数信息?
  • 2017-06-05 请问如何截获串口通信的数据?
  • 2017-06-05 OCX添加对外属性结果外部调用全部错位,求助!~~
  • 2017-06-05 EnumProcesses,编译的时候提示找不到Psapih??????
  • 2017-06-04 HowtoScrollaMFCActiveXcontrol
  • 2017-06-05 testexe中的0x7822ac0emfc100uddll处有未经处理的异常:0xC0000005:读取位置0xccccccc8时发生
  • 2017-06-05 请问有没什么办法动态分配可以进程间共享的内存??

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • >>>>>>>>>>>ATLServer应用程序的发布问题,各位大侠帮帮忙
    • 100分求助VC60Cannotopenthefile的问题。。。
    • 我在主窗口使用背景MAP图片,时为什么经常出现控件被覆盖无法正常显示的,谢谢
    • 用VC实现---信任站点检测方法
    • MFC与SQL连接后运行出现问题
    • 如何解决这个vc2010编写控件的BUG(LONGLONG属性)
    • 用double来表示像素点位置有什么意义?
    • 巨简单问题!!!!
    • 请com高手帮忙,如何把一个DLL转成标准的COM组建???
    • import一个dll的作用是什么?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有