c# - 从托管 C++/CLI 线程调用静态 C# 方法
问题描述
我似乎在调用静态 C# 方法时遇到问题。
我目前有 2 个 DLL,我将它们注入到一个古老的遗留应用程序中,然后执行一个静态方法,如下面的代码所示:
模块.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;
}
结果:我打开了控制台,弹出了“测试”消息,但没有弹出“是”-相反,应用程序崩溃了。
解决方案
将 DLL 移动到与我注入的可执行文件相同的文件夹中解决了这个问题。
推荐阅读
- python - Python:如何将 Voronoi 单元扩展到几何边界?
- python - 如何将 Google Colab 与服务器本地运行时连接
- python-3.x - 如何使用 asyncio 而不是线程来评估一个生成器上的多个函数?
- matlab - Simulink Stateflow:向状态添加不变量
- python - Matplotlib twiny() 轴没有原始轴的填充
- java - 无法发现对等点 - Wifi Direct-
- javascript - 在活动活动 ul 项目下方显示箭头
- windows - 即使将数据插入 PostgreSQL 数据库,Docker 卷仍然是空的
- ios - 以编程方式实例化自定义 xib 以无限循环结束
- python - 使用 oauth2 和 jwt 在 FastApi 中进行身份验证