使用和不使用 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
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配置。
这是我的代码 -
#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
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配置。