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

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",MB_OK);
}

我可以成功编译一个FooBar.dll,但是当使用“ rundll32 FooBar.dll”运行它时,它什么也没做,但是它并没有告诉我应该完全定义入口点。

我基本上是在尝试做一个简单的DLL,可以将其作为测试运行以弹出消息框。

asusxiao123 回答:从命令行运行DLL文件以弹出消息框

有几点要考虑:

  • 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 ++。)
本文链接:https://www.f2er.com/3153784.html

大家都在问