erforsche ich .net Methoden von nicht verwalteten C++ Code aufrufen und haben die Funktion unten in How To Inject a Managed .NET Assembly (DLL) Into Another ProcessWie Dot Net-Hosting-Funktion teilen, wenn sie über C++ dll Aufruf
void StartTheDotNetRuntime()
{
// Bind to the CLR runtime..
ICLRRuntimeHost *pClrHost = NULL;
HRESULT hr = CorBindToRuntimeEx(
NULL, L"wks", 0, CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost, (PVOID*)&pClrHost);
// Push the CLR start button
hr = pClrHost->Start();
// Okay, the CLR is up and running in this (previously native) process.
// Now call a method on our managed class library.
DWORD dwRet = 0;
hr = pClrHost->ExecuteInDefaultAppDomain(
L"c:\\PathToYourManagedAssembly\\MyManagedAssembly.dll",
L"MyNamespace.MyClass", L"MyMethod", L"MyParameter", &dwRet);
// Stop the CLR runtime
hr = pClrHost->Stop();
// Don't forget to clean up.
pClrHost->Release();
}
Dies funktioniert ohne Probleme, wenn sie aufgerufen einmal gefunden in eine Konsolenanwendung.
Ich möchte nun diese Funktion für die Verwendung in einer DLL spalten, sollte dies logisch in drei Teile
Method - DLLMain
DLL_PROCESS_ATTACH
Bind to the CLR runtime
Push the CLR start button
DLL_PROCESS_DETACH
Stop the CLR runtime
Do not forget to clean up.
Method - CallDotNetToDoSomething
Wie und wo erkläre ich die ICLRRuntimeHost pClrHost/HRESULT hr, um dies zu erreichen?
Es ist erwähnenswert, dass ab .NET 3.5 jetzt mehrere .NET-Laufzeiten in einem einzigen Prozess (nebeneinander) haben können. Ich bin mir nicht sicher, wie sich dies auf das Problem des ursprünglichen Posters auswirkt. –