アンマネージ C++ コードからの .net メソッドの呼び出しを調査しており、マネージ .NET アセンブリ (DLL) を別のプロセスに挿入する方法で以下の関数を見つけました。
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();
}
これは、コンソール アプリケーションで 1 回呼び出されると問題なく動作します。
この関数を dll 内で使用するために分割したいと考えています。論理的には、これは 3 つの部分に分割する必要があります。
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
これを実現するために、ICLRRuntimeHost pClrHost/HRESULT hr を宣言する方法と場所を教えてください。