Вот мой код —
#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, эта функция работает нормально, я могу создать DllMain.txt в папке e: \ temp \, но если Visual Studio не установлена, проблема с вызовом функции. Проводник не может вызвать эту функцию. Больше информации дано в отредактированном разделе того, что я пытаюсь.
Я строю DLL-файл со следующими настройками, проверьте эту ссылку
Настройки свойства, чтобы сделать DLL
Editted Information ::
Я реализую «Отправить» протокол Windows для почтового клиента. Так что мне нужно построить DLL, и я должен зарегистрировать свое приложение в качестве почтового клиента в Windows. Поэтому, если пользователь выберет мое приложение для почтового клиента по умолчанию, такого как outlook и thunderbird, мне понадобится dll для выполнения какой-либо задачи.
Пример — выберите файл -> (щелкните правой кнопкой мыши) отправить — — получателю почты.
Здесь проводник вызывает файл dll. Если установлена visual studio, то работает отлично. Пробовал на ПК, где Visual Studio не установлена, сообщение об ошибке Result, и после этого я попытался после установки Visual Studio и получил желаемый результат.
Я не хочу заставлять моего пользователя устанавливать среду выполнения MSVC. Потому что, если вы знаете о Thunderbird (продукт Mozilla), Thunderbird может сделать это без времени выполнения MSVC.
Вашему приложению или вашей DLL нужна установленная среда MSCV. Вы получаете его как распространяемый в зависимости от версии VS. Например. для VS2008 вам нужно это:
https://www.microsoft.com/en-us/download/details.aspx?id=5582
Если вы хотите распространять свою DLL (или ваше приложение), вам следует создать установщик для вашей программы, который при необходимости устанавливает среду выполнения.
** дополнение **:
Если вы хотите избежать установки DLL во время выполнения, вы также можете изменить настройки компилятора C ++. Перейдите на вкладку «Генерация кода» и выберите соответствующую не-DLL версию времени выполнения. Это увеличивает размер вашей DLL, но может помочь избежать зависимости.
В любом случае, я бы порекомендовал создать установщик.
Чтобы запустить DLL в Windows без MSVC, нужно создать DLL с Release Configuration.
Вы можете изменить это, выбрав «Проект» -> «Свойства» -> «Диспетчер конфигурации» -> «Конфигурация активного решения», и измените на «Выпуск» (если он не выбран).
Если MSVC не установлен и dll имеет конфигурацию отладки, то проводник не может прочитать dll, поэтому dll должна иметь только конфигурацию выпуска.