能力值:
( LV4,RANK:50 )
|
-
-
2 楼
给个实例,说明一下
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
.net core
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
int main()
{
HRESULT hr = S_OK;
ICLRMetaHost *m_pMetaHost = NULL;
ICLRRuntimeInfo *m_pRuntimeInfo = NULL;
ICLRRuntimeHost *pClrHost = NULL;
HMODULE clrmd = LoadLibrary(L"mscoree.dll");
MyCLRCreateInstance func = (MyCLRCreateInstance)(GetProcAddress(clrmd, "CLRCreateInstance"));
hr = func(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&m_pMetaHost);
if (hr != S_OK)
return hr;
//cout << "CLR 初始化成功" << endl;
//OutDebugStr(L"CLR 初始化成功");
//v2.0.50727
//v4.0.30319
hr = m_pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&m_pRuntimeInfo));
if (hr != S_OK)
return hr;
//cout << "载入.net 版本成功" << endl;
//OutDebugStr(L"载入.net 版本成功");
hr = m_pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pClrHost));
if (hr != S_OK)
{
return hr;
}
//这个貌似没必要主动调用了, 2.0还是要的. 4.0虽然没必要.但调用一下无妨
hr = pClrHost->Start();
//if (hr != S_OK)
//{
// return hr;
//}
//cout << "开启接口 载入运行" << endl;
//OutDebugStr(L"开启接口 载入运行");
DWORD dwRet = 0;
//TCHAR szPathTemp[512];
//GetModuleFileName(NULL, szPathTemp, 512);
//运行
hr = pClrHost->ExecuteInDefaultAppDomain(L"SampleManagedApp.exe",
L"Test.Run",
L"Test",
L"Hello World!",
&dwRet);
if (hr != S_OK)
{
//OutDebugStr(hr);
}
//不打算停止释放. 如果成全局.那就可以互相调用了
//hr = pClrHost->Stop();
//pClrHost->Release();
//OutDebugStr(L"CLR 释放完毕 卸载DLL");
FreeLibrary(clrmd);
//OutDebugStr(L"Dome完毕");
return 0;
}
手工开启clr调用函数并传参.
有点烂大街的说法.
PS:
楼主这种语法是要开启clr的吧.
vc6 支持c++/clr 这种语法? 如果不支持能编译通过?
印象中vc6 没有clr才对吧? 印象..
PS2:
看懂了 = =
楼主这是用clr来编译一个dll.
然后vc6再通过这个dll来执行.net的方法
vc6->c++/clr.dll->.net.dll
然而直接通过c++启动clr调用.net.dll最为方便了.
中间不用通过一个c++/clr.dll来中转
|
|
|