gpt4 book ai didi

com - 如何从 VC++ .EXE 应用程序调用 COM DLL(在 VC++ 中)的函数?

转载 作者:行者123 更新时间:2023-12-04 11:15:54 27 4
gpt4 key购买 nike

我有一个用 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应用程序(基于对话框)的调用者应用程序项目(calling.exe)的解决方案。将此calling.exe作为启动项目..

第 2 步:通过右键单击解决方案资源管理器中的 call.exe 项目进入属性。 配置属性 --> C/C++ --> 常规 --> 附加包含指令 添加了 DLL 项目的路径。

第三步:再次右键单击调用.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 中类的名称。

我没有对现有 DLL 项目的配置设置进行任何更改,因为它是专家已经准备好的 DLL,我正在编写调用应用程序来调用此 DLL 中存在的函数。

提前致谢。

最佳答案

您遵循的说明用于调用普通 DLL 中的函数,而不是 COM DLL。要访问 COM DLL,您需要通过 COM。

您无需链接到 DLL 的 lib 文件或包含任何头文件,也无需移动 DLL。

首先,确保通过在其上运行 regsvr32 来注册 DLL。

regsvr32 "c:\..\..\xyz.dll" ; insert the correct path

然后将 #import 指令添加到项目的 stdafx.h 中,其中包含 DLL 的路径。
#import "c:\..\..\xyz.dll" // insert the correct path

在文件 View 中右键单击 stdafx.cpp 并选择 编译 .
这将生成访问 DLL 所需的包装“智能指针”类。
智能指针类与 DLL 中的接口(interface)名称相同,但末尾带有“Ptr”。

在 Debug 目录中查看扩展名为 .tlh 且名称与 DLL 相同的文件。它以 C++ 命名空间声明开始。
这是您将从 DLL 创建的对象所在的命名空间。

假设命名空间是 XYZ,并且您想要实例化一个 Cx 对象,该对象公开 Ix 接口(interface)。
你会这样做:
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());
}

然后您可以像普通指针一样继续使用它。
完成后不要删除它,它会在超出范围时自动销毁。

关于com - 如何从 VC++ .EXE 应用程序调用 COM DLL(在 VC++ 中)的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com