我有一个用VC++编码的COM DLL(比方说,xyz.dll).我想创建一个调用EXE应用程序(calling.exe),它将调用COM DLL(xyz.dll)的函数.
我按照链接http://www.codeproject.com/kb/DLL/XDllPt1.aspx中的步骤进行操作 .但我无法连接DLL和EXE,因此无法调用COM DLL的功能.我是COM和VC++编程的新手.任何人都可以帮助我.
我正在使用Visual Studio 2005.
这些是我遵循的确切步骤--------
步骤1:创建了具有DLL项目(xyz.dll)项目和模板MFC应用程序(基于对话框)的调用者应用程序Project(calling.exe)的解决方案.将此calling.exe作为启动项目..
第2 步:右键单击解决方案资源管理器中的calling.exe项目,直到属性.配置属性 - > C/C++ - >常规 - >附加包含指令 并添加了DLL项目的路径..
步骤3:再次右键单击calling.exe应用程序项目转到属性 - >配置属性 - >链接器 - >输入 - >附加依赖项,并添加了构建的DLL项目的.Lib文件的路径.
步骤4: 右键单击calling.exe应用程序项目, 属性 - >公共属性 - >引用 - >添加对DLL的引用.
步骤5: 将xyz.dll文件复制到应用程序项目目录.
第6步: 我的DLL有许多头文件及其相应的源文件.因此,将DLL项目中存在的所有头文件添加到我的calling.exe应用程序中.在calling.exe应用程序的一个.CPP程序中出现的OnInitDialog()函数中,我调用了DLL的函数.
只是声明
Cx对象; objname.func();
这里Cx是DLL中类的名称.
我没有对EXISTING DLL项目的配置设置进行任何更改,因为它是已经由专家准备的DLL,我只是编写调用applaction来调用此DLL中存在的函数.
提前致谢.
Mar*_*rst 10
您遵循的说明是调用普通DLL中的函数,而不是COM DLL.要访问COM DLL,您需要通过COM.
您没有链接到DLL的lib文件或包含任何标头,您不需要移动DLL.
首先,通过在其上运行regsvr32来确保注册DLL.
regsvr32 "c:\..\..\xyz.dll" ; insert the correct path
Run Code Online (Sandbox Code Playgroud)
然后将#import指令添加到项目的stdafx.h中,其中包含DLL的路径.
#import "c:\..\..\xyz.dll" // insert the correct path
Run Code Online (Sandbox Code Playgroud)
右键单击文件视图中的stdafx.cpp,然后选择compile.这将生成访问DLL所需的包装器"智能指针"类.智能指针类与DLL中的接口具有相同的名称,但最后使用"Ptr".
查看扩展名为.tlh且与Debug目录中的DLL名称相同的文件.它以C++名称空间声明开头.这是您要从DLL创建的对象所在的名称空间.
假设命名空间是XYZ,并且您想要实例化一个Cx对象,该对象公开Ix接口.你会这样做:
try {
XYZ::IxPtr obj;
obj.CreateInstance(__uuidof(XYZ::Cx));
obj->func();
} catch (_com_error e) {
printf("Error: %S\n", e.Description());
printf("Error: %S\n", e.ErrorMessage());
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像普通指针一样继续使用它.完成后不会删除它,当它超出范围时会自动销毁.
| 归档时间: |
|
| 查看次数: |
5122 次 |
| 最近记录: |