Trädvy Permalänk
Medlem
Registrerad
Okt 2005

C++ Starta CLRRuntime?

Hallå..

Är fullständigt värdelös på C++ programmering.. Så vad jag försöker uppnå är att dra igång CLRRuntime i en applikation så jag sedan kan köra underbar C# kod där inne.

Vad jag gör är att jag injectar en dll som jag skrivit i C++ och den ser ut något i stil med det här.

ICLRRuntimeHost *pClrHost = NULL; HRESULT hr = CorBindToRuntimeEx( NULL, L"wks", 0, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (PVOID*)&pClrHost); MessageBox(NULL, L"Before", L"Before", NULL); hr = pClrHost->Start(); MessageBox(NULL, L"After", L"After", NULL); DWORD dwRet = 0; hr = pClrHost->ExecuteInDefaultAppDomain( L"c:\\trams.dll", L"namespace.class", L"method", L"parameter", &dwRet); pClrHost->Release();

Men mellan mina två MessageBox när han försöker köra Start(); så ja slutar han helt enkelt.

Min vilda gissning är att det blir en spännande exception här eller nåt. MEN! Hur kan jag felsöka härifrån? Av någon anledning är inte VS så sugen på att attacha till processen heller, så jag kan inte debugga..

Är det någon som har en aning om hur jag kan bära mig åt?

Trädvy Permalänk
Medlem
Registrerad
Okt 2005

Update. Har lyckats attacha debugger nu iaf. Om jag sätter det på processen som sköter min DLL injection funkar det. Men.. ja det "returnar" direkt på hr = pCLRHost->Start();.. fortfarande

provat skriva en egen DLL injector i C# också nu, precis samma problem. Så jag antar inte det där själva injectionen som är problemet..

Edit:

case DLL_PROCESS_ATTACH: CreateThread(0, 0 ,(LPTHREAD_START_ROUTINE)StartDotNetRuntime, 0, 0, 0);

Löste mitt problem. Om jag slängde det i en metod och gjorde tråd av det här så funkade det. Om någon har någon aning om vad skillnaden är så får ni gärna berätta.