Вызов файла 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.

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам