gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:14 25 4
gpt4 key购买 nike

我似乎在调用静态 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com