从命令行运行DLL文件以弹出一个消息框

问题描述 投票:0回答:1

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,可以将其作为测试运行以弹出消息框作为结果。

dll command-line-interface
1个回答
0
投票

有几点要考虑:

  • rundll32运行遵循特定接口的普通Win32 DLL。您正在使用C ++ / CX编写.Net DLL,这是另一回事。另外,您不遵循界面。
  • 您甚至想通过“运行” DLL来做什么?在.Net Core之外(您使用dotnet运行DLL,而不是rundll32),DLL应该是包含实际程序帮助程序的库,而不是独立运行的库。

因此,根据您的需要,您可以执行以下操作之一:

  • 跟随rundll32 interface并编写一个普通的非托管函数。这在C ++ / CX中是可能的。该功能甚至可以调用托管代码。但是,您不应这样做,原因既有rundll32 is obsolete,也有因为C ++ / CX也是很多传统技术(它不适用于.Net Core,仅适用于.Net Framework)。
  • 编写一个自定义程序来调用您的DLL。这就是你想做的。但是即使在这种情况下,如果可以的话,您也许应该重新考虑选择的语言。 (也许这不是您的选择。但是根据我的经验,大多数在SO上询问有关C ++ / CX的人都是偶然地选择了它,实际上是要使用纯C ++。)
© www.soinside.com 2019 - 2024. All rights reserved.