0

这是我的代码 -

#include "main.h"
#include <fstream>

using namespace std;


extern "C" __declspec(dllexport) BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    ofstream outfile;
    outfile.open("E:\\temp\\DllMain.txt");
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
        break;

        case DLL_PROCESS_DETACH:
            // detach from process
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}

所以问题是,如果安装了 Visual Studio,这个函数工作正常,我可以在 e:\temp\ 文件夹中创建 DllMain.txt,但如果没有安装 Visual Studio,函数调用有问题。Explorer 无法调用此函数。更多信息在我正在尝试的编辑部分中给出。

我正在使用以下设置构建一个 dll 文件,请检查此链接

制作dll的属性设置

Editted Information ::

我正在为邮件客户端实现 Windows 的“发送到”协议。所以我需要构建一个 dll 并且我必须在 Windows 中将我的应用程序注册为电子邮件客户端。因此,如果用户为 Outlook 和 Thunderbird 等默认电子邮件客户端选择我的应用程序,我需要一个 dll 来执行某些任务。

示例 - 选择一个文件 ->(右键单击)发送到 -> 邮件收件人。

这里资源管理器调用 dll 文件。如果安装了视觉工作室,则完美无缺。在未安装 Visual Studio 的电脑上尝试,结果错误消息,然后我在安装 Visual Studio 后尝试并得到了我想要的结果。

我不想强迫我的用户安装 MSVC 运行时。因为如果您了解 Thunderbird(Mozilla 产品),那么 Thunderbird 可以在没有 MSVC 运行时的情况下完成这项工作。

4

2 回答 2

1

您的应用程序或您的 DLL 需要安装 MSCV 运行时。根据 VS 版本,您可以将其作为可再发行产品。例如,对于 VS2008,您需要: https ://www.microsoft.com/en-us/download/details.aspx?id=5582

如果您想分发您的 DLL(或您的应用程序),那么您应该为您的程序创建一个安装程序,以便在需要时安装运行时。

**添加**:如果您想避免安装运行时 DLL,您还可以更改 C++ 编译器设置。选择代码生成选项卡并选择适当的非 DLL 版本的运行时。这会增加 DLL 的大小,但有助于避免依赖性。无论如何,我建议创建一个安装程序。

于 2016-07-22T14:33:35.960 回答
-1

要在没有 MSVC 的 Windows 中运行 dll,需要使用 Release Configuration 构建 dll。

您可以从选择项目 -> 属性 -> 配置管理器 -> 活动解决方案配置中更改此设置,然后更改为发布(如果未选中)。

如果没有安装 MSVC 且 dll 为 Debug 配置,则资源管理器无法读取 dll,因此 dll 必须仅为 Release 配置。

于 2016-07-25T06:44:17.517 回答