张德长

导航

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.点击确认后等待出现提醒注销成功即可。

 

...

posted on 2022-09-16 11:17  张德长  阅读(190)  评论(1编辑  收藏  举报