我已經創建了一個C++ DLL(它必須在C++中),它可以將一個.Net DLL鏈接到一個Web服務服務器。 .Net DLL將Web服務調用傳遞給C++ DLL,並通過.Net DLL進行評估和響應。loadFromRemoteSources在一個C++項目
類似的東西:
HSPWebService.DLL
-----------------------------------
HSPProxy.DLL | HSPWebServiceLib.DLL
-----------------------------------
HSPSendData.DLL
- HSPWebService.DLL - 正確的C++ DLL。
- HSPProxy.DLL - 由MIDL編譯器通過HSP.DLL MIDL接口生成的代理。
- HSPWebServiceLib.DLL - 通過HSP.DLL由tlmbimp生成的typelib。
- HSPSendData.DLL - NET的DLL它承載Web服務的服務器
一切工作就像一個魅力。問題是當DLL文件在網絡共享中時(// myPc/share)。我的應用程序日誌顯示錯誤0x80131515:
CreateAssemblyInstance錯誤:無法創建程序集實例。 (hr = 80131515)
在我的研究中,我發現0x80131515錯誤是因爲.Net框架默認不會從外部來源加載程序集。對於.Net項目,該選項可以設置爲項目設置。但是我在Visual Studio 2010上有一個C++項目,我不知道如何在我的項目(或者我的代碼)上使用這個配置。有任何想法嗎?
的CreateAssemblyInstance功能:
HRESULT CHSPWebServiceObjectHost::StartCLR(CComPtr<ICorRuntimeHost>& spRuntimeHost, CComPtr<IDispatch>& spDispHost) const
{
spRuntimeHost = NULL;
spDispHost = NULL;
//Retrieve a pointer to the ICorRuntimeHost interface
HRESULT hr = CorBindToRuntimeEx(L"v4.0.30319",
L"wks",
STARTUP_LOADER_SAFEMODE | STARTUP_CONCURRENT_GC,
CLSID_CorRuntimeHost,
IID_ICorRuntimeHost,
(void**)&spRuntimeHost);
if (FAILED(hr))
{
Log(logDriver, _T("CHSPWebServiceObjectHost::StartCLR ERROR: Could not load CLR into unmanaged host process. ( hr=%08X)"), hr);
return hr;
}
//Start the CLR
hr = spRuntimeHost->Start();
if (FAILED(hr))
{
Log(logDriver, _T("CHSPWebServiceObjectHost::StartCLR ERROR: Could not start CLR. (hr=%08X)"), hr);
return hr;
}
//Retrieve the IUnknown default AppDomain
CComPtr<IUnknown> spUnknown;
hr = spRuntimeHost->GetDefaultDomain(&spUnknown);
if (FAILED(hr))
{
Log(logDriver, _T("CHSPWebServiceObjectHost::StartCLR ERROR: Could not retrieve pointer to domain interface. ( hr=%08X)"), hr);
return hr;
}
CComQIPtr<_AppDomain> spDefAppDomain(spUnknown);
if (spDefAppDomain == NULL)
return E_NOINTERFACE;
CString strAssemblyFullPath = _T(".\\HSPSendData.dll");
return CreateAssemblyInstance(spDefAppDomain, spDispHost, strAssemblyFullPath, _T("Elipse.HSPWebService. HSPWebServiceHost"));
}
注意:'CorBindToRuntimeEx' [已棄用](http://msdn.microsoft.com/zh-cn/library/99sz37yh(v = vs.100).aspx)。請參閱[將公共語言運行時加載到進程中](http://msdn.microsoft.com/zh-cn/library/01918c6x(VS.100).aspx)。 –