使用和不使用 visual studio 调用 dll 文件

Call dll file with and without visual studio

这是我的代码 -

#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 文件,检查这个 link

Property settings to make dll

Editted Information ::

我正在为邮件客户端实施 windows 的 "Send To" 协议。所以我需要构建一个 dll,并且我必须在 windows 中将我的应用程序注册为电子邮件客户端。因此,如果用户 select 将我的应用程序用于 outlook 和 thunderbird 等默认电子邮件客户端,我需要一个 dll 来完成一些任务。

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

这里资源管理器调用dll文件。如果安装 visual studio 就完美了。在未安装 Visual studio 的电脑上尝试,出现错误消息,然后我在安装 Visual studio 后尝试并得到我想要的结果。

我不想强迫我的用户安装 MSVC 运行时。因为如果你了解 thunderbird(Mozilla 产品),thunderbird 可以在没有 MSVC 运行时的情况下完成这件事。

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

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

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

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

您可以从 select 项目 -> 属性 -> 配置管理器 -> 活动解决方案配置更改它并更改为发布(如果它不是 selected)。

如果没有安装MSVC,dll是Debug配置,explorer是无法读取dll的,所以dll必须是Release配置。