c# - 从托管 C++/CLI 线程调用静态 C# 方法

标签 c# c++-cli

我似乎在调用静态 C# 方法时遇到了问题。

我目前有 2 个 DLL,我将它们注入(inject)到一个古老的遗留应用程序中,然后执行一个静态方法,如下面的代码所示:

模块.cs

using System;

namespace Debugger
{
    public static class Module
    {
        public static void Initialize()
        {
            Console.WriteLine("YES");
        }
    }
}

dllmain.cpp

#include "stdafx.h"

#include <windows.h>

#pragma once

#pragma managed

using namespace System;
using namespace System::Reflection;
using namespace Debugger;

DWORD WINAPI MainThread(LPVOID param)
{
    AllocConsole();

    Console::WriteLine("Test");

    Debugger::Module::Initialize();

    FreeLibraryAndExitThread((HMODULE)param, 0);

    return 0;
}

#pragma unmanaged

HMODULE hModule;
BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD reason, LPVOID reserved) 
{
    switch (reason) 
    {
        case DLL_PROCESS_ATTACH:
            CreateThread(0, 0, MainThread, hModule, 0, 0);
            break;
        case DLL_PROCESS_DETACH:
            FreeLibrary(hModule);
            break;
    }
    return true;
}

结果:我打开了控制台,弹出了“测试”消息,但没有弹出"is"消息 - 相反,应用程序崩溃了。

最佳答案

将 DLL 移动到与我注入(inject)的可执行文件相同的文件夹解决了这个问题。

关于c# - 从托管 C++/CLI 线程调用静态 C# 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794790/

相关文章:

c# - .NET Core 有 Rx.NET 吗?

c++ - 在更高版本的visual studio中运行vs2005 c++项目

c++ - 将类类型传递给 Windows 窗体构造函数并必须将其转换为类指针才能使用它

.net - 高潮 RA0000 : No types were registered

c# - .NET 首次运行方法时发布代码非常慢。如何使用 NGen 修复它?

c# - DLL 的入口点

c# - 如何使用 Linq 检查一个数组的成员是否与另一个数组的任何成员匹配?

c - 我是否需要在 C++/CLI 中删除非托管对象

c# - C++/CLI ref 类和 C# 类之间的区别

c# - WPF 中的 Windows 图标属性,需要标记扩展吗?