COM组件中 添加导出函数的方法

COM组件中 添加导出函数的方法

0准备

类前缀

define ATL_NO_VTABLE __declspec(novtable)

函数前缀

define STDMETHODIMP HRESULT STDMETHODCALLTYPE

define STDMETHODCALLTYPE __stdcall

class ATL_NO_VTABLE CDwgOPFun :

STDMETHODIMP CDwgOPFun::tesst(BSTR aaa, LONG* rr)

1添加

输入方法名,选择参数特性;

in表示输入参数;

out表示输出参数;

retval表示返回值;

in、out都可单独使用;

retval不可单独使用,必须和out一起使用,out retval必须放在最后一个;

out参数必须是指针类型,非指针类型不可以作为out参数;

返回值Hresult表示函数执行结果(是否成功),并不是真正的返回值;

2实现

STDMETHOD(test)(BSTR aaa, LONG* rr);

STDMETHODIMP CDwgOPFun::test(BSTR aaa, LONG* rr)

{ // TODO: 在此添加实现代码 *rr = 1; return S_OK;}

函数添加后,就会在cpp文件和h文件中出现该函数;

在cpp文件中实现该函数即可;

3引用

调用程序中添加引用

注意,要添加ocx文件,而不是dll文件;

注意,如果之前已经添加,需要重新添加,以更新;

添加引用的顺序:

  1. 删除之前的引用;

  2. VS-生成-清理解决方案;

  3. 添加引用,选择ocx文件;

Error:未能添加对OCX的引用,请确保此文件可访问并且是一个有效的程序集或COM组件;

解决:cmd命令窗口中进行注册,输入

regsvr32 c:\dsoframer.ocx回车即可;

注册完成后再添加就不会报错了;

4调用

class ATL_NO_VTABLE CDwgOPFun :

DwgOPLib.DwgOPFun dwgFun = new DwgOPLib.DwgOPFun();

long lErrCode = dwgFun.ExportPdfSimple3(textBox1.Text, textBox3.Text, 0);

首先用引用名.类名,实例化一个类;

用类实例.函数名进行函数调用;

输入所需参数;

返回值为设置属性out retval的值;

添加调试启动项目,项目属性→配置属性→调试→命令→添加启动程序(路径信息),再次调试程序时,就会先启动该程序,在这个程序环境中进而启动本程序,然后进行调试;

这种调试方法适用于被调用程序的调式,无法自行运行的com组件(ocx)或者程序集的调试(dll);

OCX文件 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension);是可执行的文件的一种,但不可直接被执行; 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。

PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)

ocx引用方式:

(1)cmd命令注册组件,regsvr32 c:\dsoframer.ocx

(2)vs重新添加dsoframer.ocx..

ocx的注册

ocx的注销

1.进入开始,点击运行,或者win+R 输入cmd回车。

2.在出现的框中键入regsvr32 C:\xxxx.ocx 。(XXXX为控件名, C:\为目录))(regsvr32 E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)

3.点击确认后等待出现提醒注册成功即可。

oca 文件

Oca文件不是控件,其中保存Ocx控件的属性

1.进入开始,点击运行。

2.在出现的框中键入regsvr32 /u C:\xxxx.ocx 。(XXXX为控件名, C:\为目录)(regsvr32 /u E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)

3.点击确认后等待出现提醒注销成功即可。

COM组件中 添加导出函数的方法

Original: https://www.cnblogs.com/zhangdezhang/p/16699193.html
Author: 张德长
Title: COM组件中 添加导出函数的方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611272/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mybatis缓存机制

    MyBatis是常见的 Java数据库访问层框架。在日常工作中,多数情况下是使用 MyBatis的默认缓存配置减轻数据库压力,提高数据库性能,但是 MyBatis缓存机制有一些不足…

    数据库 2023年6月11日
    0127
  • Redisson

    ​ Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实…

    数据库 2023年6月6日
    091
  • Xshell连接Centos7无法输入密码

    使用命令vi /etc/ssh/sshd_config 修改文件 在最后一行找到 PasswordAuthentication 改成yes 重新运行 systemctl resta…

    数据库 2023年6月14日
    0100
  • ShardingSphere 异构迁移最佳实践:将3.5亿量级的顾客系统 RTO 减少60倍

    Apache ShardingSphere 助力当当 3.5 亿用户量级顾客系统重构,由 PHP+SQL Server 技术栈无缝转型为 Java+ShardingSphere+M…

    数据库 2023年6月16日
    0118
  • LeetCode 344. 反转字符串

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 //输入一个字符串,输出它的倒序字符串 input: Hello output: olleH …

    数据库 2023年6月11日
    084
  • Rabbitmq从安装到简单入门

    1:Rabbitmq是什么? RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。 它由以高性能、健壮以及可伸缩性出名的 Erlang …

    数据库 2023年6月6日
    086
  • VM Ware 给Centos虚拟机配置静态IP

    前言:在大家的日常运维工作中,肯定多多少少都会用到虚拟机,但是默认情况下VMware创建的虚拟机每次启动都有可能更换IP这就对我们的工作造成了一定的麻烦,下面我就给大家介绍下,如何…

    数据库 2023年6月9日
    093
  • 小姐姐用动画图解Git命令,一看就懂!

    无论是开发、运维,还是测试,大家都知道Git在日常工作中的地位。所以,也是大家的必学、必备技能之一。之前公众号也发过很多git相关的文章: 但是呢,民工哥,也经常在后台看到读者说,…

    数据库 2023年6月9日
    096
  • Proxy代理模式(结构型)

    一:描述: 为其他对象提供一种代理,来控制对这个对象的访问。如当操作某个对象很复杂时,我们可以建个代理来操作复杂对象,并开放一些简单的接口/方法来让我们比较简单的间接操作,也可在代…

    数据库 2023年6月11日
    092
  • 一文了解Cookie

    Cookie 什么是 Cookie? 先要了解HTTP是 无状态的Web服务器,什么是无状态呢?一次对话完成后下一次对话完全不知道上一次对话发生了什么。如果在Web服务器中只是用来…

    数据库 2023年6月11日
    099
  • Java 考试系统项目源码 springboot mybaits vue.js 支持手机端考试

    新增功能:培训学习模块, PDF电子课程、视频课程、直播课程(自己搭建直播流服务器) 人脸识别(考试时验证,有开关)、补考开关 组建试卷:创建试卷,题目、类型、总分、及格分数、时长…

    数据库 2023年6月6日
    082
  • Python接口自动化——文件上传/下载接口

    转载请注明出处❤️ 你好,我是测试蔡坨坨。 我们在做接口自动化测试的时候,经常会碰到 文件上&#x4F20…

    数据库 2023年6月11日
    077
  • Flyweight 享元(结构型)

    一:描述:(该模式实际应用较少) Flyweight 享元模式是对大量细粒度的元素进行共享和重用。减少对象的创建减轻内存; 注和单例模式不同的是:享元模式的各个对象佣有各自的行为并…

    数据库 2023年6月11日
    0103
  • 计算机中内存、cache和寄存器之间的关系及区别

    寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。…

    数据库 2023年6月11日
    0102
  • Java代码如何创建GUID字符串呢?

    随机字符串是我们日常开发中,经常使用的一种字符串,那么下文将讲述具有代表性的字符串GUID GUID字符串是全球唯一标识,是我们经常使用的一种唯一标识 如:分布式系统中使用其作为表…

    数据库 2023年6月11日
    090
  • tomcat上部署jenkins

    tomcat上部署jenkins tomcat上部署jenkins 部署tomcat 部署jenkins Jenkins创建流水线任务 主机名称 IP地址 需要的应用服务 工具包 …

    数据库 2023年6月14日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球