タイトルの通りです。
それに伴ってFriendly.Windowsを参照しているdllも更新しています。
Friendly.Windows.Grasp.2.5.1
Friendly.Windows.NativeStandardControls.2.2.3
Friendly.FormsStandardControls.2.3.2
Friendly.WPFStandardControls.1.1.5
内容は不具合修正です・・・
.NetFramework4.0をインストールしていないPCでアタッチできなかった
あれー?テストしてなかったなー。まだXPのサポート切れてなかった頃はやってたんですけどね・・・(でもたまたま)
インストーラ形式からNuget形式に変えたときにデグったようです。
原因は・・・
CLRCreateInstanceですね。ホストAPIなんですけど、.Netの4.0がインストールされていないとMSCorEE.dllに入っていないらしいです。
HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost));
修正内容
で、書き換えました。
LoadLibraryとGetProcAddressで取得して使います。
CLRCreateInstanceが取れなければ、CorBindToRuntimeEx使います。
CorBindToRuntimeExは逆に4.0以降は非推奨ですね。
//CLRCreateInstanceは4.0がインストールされていなければ存在しないauto hMod = LoadLibrary(L"MSCorEE.dll"); auto clrCreateInstance = (CLRCreateInstanceFnPtr)GetProcAddress(hMod, "CLRCreateInstance"); if (!clrCreateInstance) { typedef HRESULT(__stdcall *CorBindToRuntimeExType)(LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor, DWORD startupFlags, REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv); auto corBindToRuntimeEx = (CorBindToRuntimeExType)GetProcAddress(hMod, "CorBindToRuntimeEx"); if (!corBindToRuntimeEx) { return FALSE; } HRESULT hr = corBindToRuntimeEx(szVersion, nullptr, 0, CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pClrRuntimeHost)); if (FAILED(hr)) { return FALSE; } return TRUE; }
あんまり.Net4.0が入っていない環境ってないですけどね・・・。
でも、これで今まで引っかかっていた人、すみませんでした orz