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

Call dll file with and without visual studio

本文关键字:dll 文件 调用 visual studio      更新时间:2023-10-16

这是我的代码-

#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,函数调用有问题。资源管理器无法调用此函数。更多信息在我尝试的编辑部分给出。

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

使dll 的属性设置

Editted Information ::

我正在为邮件客户端实现windows的"发送到"协议。所以我需要建立一个dll,我必须在windows中将我的应用程序注册为电子邮件客户端。所以,如果用户选择我的应用程序作为默认的电子邮件客户端,如outlook和thunderbird,我需要一个dll来完成一些任务。

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

此处资源管理器调用dll文件。如果安装了visual studio,效果会很好。在没有安装Visual studio的电脑上尝试,结果出现错误消息,之后我在安装Visual studio后尝试,得到了我想要的结果。

我不想强迫我的用户安装MSVC运行时。因为如果你知道thunderbird(Mozilla产品),Thunderbirds可以在没有MSVC运行时的情况下完成这项工作。

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

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

**添加**:如果希望避免安装运行时DLL,还可以更改C++编译器设置。选择"代码生成"选项卡,然后选择运行时的相应非DLL版本。这增加了DLL的大小,但有助于避免依赖关系。无论如何,我建议创建一个安装程序。

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

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

如果未安装MSVC,并且dll为调试配置,则资源管理器无法读取dll,因此dll必须仅为发布配置。