Кажется, у меня проблема с вызовом статических методов C #.
В настоящее время у меня есть 2 DLL, которые я вставляю в старое унаследованное приложение, а затем выполняю статический метод, как показано в коде ниже:
Module.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;
}
В результате: я открываю консоль, выскакивает сообщение «Тест», но «ДА» нет »t - вместо этого приложение вылетает.