Запуск DLL-файла из командной строки для всплывающего окна сообщения - PullRequest
0 голосов
/ 06 ноября 2019

FooBar.h

#pragma once
#include "Msg.h"

using namespace System;

namespace FooBar {
    public ref class Class1
    {
        Msg^ msg = gcnew Msg();
    };
}

Msg.h

#pragma once
#include <Windows.h>
#pragma comment (lib, "user32.lib")

ref class Msg
{
public:
    Msg();
};

Msg.cpp

#include "pch.h"
#include "Msg.h"

Msg::Msg() {
    MessageBox(0, L"FooBar", L"FooBar", MB_OK);
}

Я бы успешно скомпилировал FooBar.dll, нокогда он запускается с "rundll32 FooBar.dll", он ничего не делает, но он не говорит мне, что точка входа вообще должна быть определена.

Я в основном пытаюсь сделать простую DLL, которую можно запустить какпроверить, чтобы всплывающее окно сообщения как результат.

1 Ответ

0 голосов
/ 06 ноября 2019

Следует учесть несколько моментов:

  • rundll32 запускает простые библиотеки Win32 DLL, которые следуют определенному интерфейсу. Вы используете C ++ / CX для написания .Net DLL, а это совсем другое. Кроме того, вы не следуете интерфейсу.
  • Что вы даже хотите сделать, "запустив" DLL? Вне .Net Core (где вы используете dotnet для запуска DLL, а не rundll32), библиотеки DLL должны быть библиотеками, содержащими помощники для реальных программ, а не чем-то, что нужно запускать отдельно.

Так что в зависимости от того, чтоесли вы хотите, вы можете выполнить одно из следующих действий:

  • Следуйте интерфейсу rundll32 и написать простую неуправляемую функцию. Это возможно в C ++ / CX. Функция может даже вызывать управляемый код. Вы не должны делать это , хотя бы потому, что rundll32 устарел , а также потому, что C ++ / CX тоже довольно унаследованная технология (она не работает с .Net Core, только с.Net Framework).
  • Напишите специальную программу для вызова вашей DLL. Это то, что вы хотите сделать. Но даже в этом случае, возможно, вам следует пересмотреть свой выбор языка, если можете. (Возможно, это не ваш выбор. Но по моему опыту, большинство людей, которые задают вопросы о C ++ / CX в SO, выбрали его случайно и действительно намеревались использовать простой C ++.)
...