#c# #clr
#c# #сброс
Вопрос:
Я использовал CLR для создания нового экземпляра в процессе, но затем я заметил, что в нем запущен еще один, могу ли я захватить эту среду выполнения и загрузить туда свою .dll?
if (CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)amp;metaHost) == S_OK) //If Creating CLR Instance with follow parameters is successful if (metaHost-gt;GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*)amp;runtimeInfo) == S_OK) //If getting Runtime version is successful if (runtimeInfo-gt;GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)amp;runtimeHost) == S_OK) //If getting the interface with the follow parameters is successful if (runtimeHost-gt;Start() == S_OK) //Start the CLR (If it is successful) { DWORD pReturnValue; //Declare our return value as a DWORD printf("MethodInvokedn"); //Invoke our method through CLR host using following parameters D:vs-WorkSpaceRaid 2binReleaseExampleProject.dll runtimeHost-gt;ExecuteInDefaultAppDomain(L"PathToDll\C1CHelperDll.dll", L"C1CHelperDll.Program", L"pwzMethodName", L"It works!!", amp;pReturnValue); printf("MethodIdkn"); std::ostringstream stream; stream lt;lt; pReturnValue; std::string str = stream.str(); printf(str.c_str()); printf(" Resultn"); //OPTIONAL: You can keep the CLR Opened depending on your needs runtimeInfo-gt;Release(); metaHost-gt;Release(); runtimeHost-gt;Release(); } return 0;
Комментарии:
1. Я не знаю, что значит «внедрить» DLL в процесс. Можете ли вы объяснить, что это значит для вас?
2. Прямо сейчас я создаю вторую среду выполнения в процессе для запуска моей библиотеки DLL. Но у этого процесса уже есть среда выполнения внутри. Итак, могу ли я каким-то образом использовать эту среду выполнения для запуска своей библиотеки DLL?
3. Что вы имеете в виду под «созданием среды выполнения»? Вы имеете в виду, что пишете программу? Или вы имеете в виду, что процесс что-то загружает? Кроме того, что вы подразумеваете под запуском библиотеки DLL? Библиотека DLL обычно является библиотекой, а не исполняемым файлом. Возможно, если бы вы поделились каким-то кодом, ваш вопрос был бы более ясным.
4. Я просто отредактировал основной пост, чтобы более четко понять, что я делаю, я создаю среду выполнения в другом пространстве процессов, а затем выполняю DLL C# в этой среде выполнения. Могу ли я использовать существующую среду выполнения для выполнения моей библиотеки DLL C#?