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