【问题标题】:C++ Cli WebClient not working in a dllC++ Cli WebClient 不能在 dll 中工作
【发布时间】:2016-08-14 11:49:17
【问题描述】:

我正在尝试使用 C++/Cli 中的 WebClient 从网址下载字符串。 但是,将 dll 注入本机进程后它会失败。

这是我的代码:

#include <Windows.h>

using namespace System;
using namespace System::Net;
using namespace System::Windows;
using namespace System::Windows::Forms;

BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL,_In_ DWORD     fdwReason,_In_ LPVOID    lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) {
        System::Windows::Forms::MessageBox::Show("test");
        WebClient web;
        String^ Data = web.DownloadString("http://www.google.com");
        System::Windows::Forms::MessageBox::Show(Data);
    }
    return TRUE;
}

在初始化数据字符串之前它可以正常工作,由于某种原因,执行停止在那里。 MessageBox::Show("test");虽然有效,但之后就没有了。 这可能是什么原因造成的?

【问题讨论】:

  • 非常不支持从 DllMain 调用托管代码。许多事情可能/正在出错。
  • @LoganCapaldo 我完全同意,但我知道 this 失败的具体原因。
  • 您假设 WebClient 可以在不需要任何 DLL 的情况下完成其工作。空闲的希望结果是,一个公平的奇迹,你首先拥有 CLR 和抖动,并且它们是正确的版本。但是,Winsocks(又名 ws2_32.dll)的运气用完了。加上典型的大量收缩包装的恶意软件也被拖进来。你需要 CreateThread 才能到达某个地方。还有很多运气。
  • @HansPassant 这是关于 ws2_32.lib 的!我将 dll 与它联系起来,现在它实际上可以工作了。您能否将您的评论添加为解决方案,以便我可以投票并选择它作为答案,以便遇到相同问题的其他人可以看到它! :)
  • Awgodno,如果没有运气,我不想听到下一百个程序员的消息。或者当您在另一台使用不同反恶意软件产品的机器上运行此程序时来自您。只需自己发布答案。

标签: c# c++ .net command-line-interface webclient


【解决方案1】:

事实证明,您只需将托管/本机混合 dll 与 winsock 库 (ws2_32.lib) 链接并创建一个单独的线程以供下载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2014-01-21
    • 1970-01-01
    • 2020-08-05
    • 2013-08-26
    • 1970-01-01
    • 2016-10-25
    • 2012-10-24
    相关资源
    最近更新 更多