Вызов файла DLL с и без визуальной студии

Вот мой код —

#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.

0

Решение

Вашему приложению или вашей DLL нужна установленная среда MSCV. Вы получаете его как распространяемый в зависимости от версии VS. Например. для VS2008 вам нужно это:
https://www.microsoft.com/en-us/download/details.aspx?id=5582

Если вы хотите распространять свою DLL (или ваше приложение), вам следует создать установщик для вашей программы, который при необходимости устанавливает среду выполнения.

** дополнение **:
Если вы хотите избежать установки DLL во время выполнения, вы также можете изменить настройки компилятора C ++. Перейдите на вкладку «Генерация кода» и выберите соответствующую не-DLL версию времени выполнения. Это увеличивает размер вашей DLL, но может помочь избежать зависимости.
В любом случае, я бы порекомендовал создать установщик.

1

Другие решения

Чтобы запустить DLL в Windows без MSVC, нужно создать DLL с Release Configuration.

Вы можете изменить это, выбрав «Проект» -> «Свойства» -> «Диспетчер конфигурации» -> «Конфигурация активного решения», и измените на «Выпуск» (если он не выбран).

Если MSVC не установлен и dll имеет конфигурацию отладки, то проводник не может прочитать dll, поэтому dll должна иметь только конфигурацию выпуска.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector