非托管C++访问 C#编写的DLL (备忘)

整理:

  对于使用 .NET Framework 编写的App,装载CLR是完全透明的。如果将托管代码编译为 .exe程序,则在运行 .exe 时,mscoree.dll 会自动启动运行时。但是,非托管应用程序也可通过装载CLR受益。运行时为扩展应用程序(如 Microsoft IIS 和 Microsoft SQL Server 2005)提供了框架。

  .NET Framework App无论是通过托管 .exe 程序集自动调用的,还是使用非托管宿主 API 加载的,都需要一段称为运行时主机的代码。运行时主机会将运行时加载到进程中,在进程中创建应用程序域,然后在这些应用程序域内加载和执行用户代码。

  

#include <mscoree.h>
#pragma comment(lib,"mscoree.lib")

  

void CTestInvokeCSdllDlg::OnBnClickedButton1()
{
   // TODO: Add your control notification handler code here
   ICLRRuntimeHost *pClrHost;
   HRESULT hr = CorBindToRuntimeEx(NULL,
      NULL,0,
      CLSID_CLRRuntimeHost,
      IID_ICLRRuntimeHost,
      (PVOID*)&pClrHost);

  //对于 1.0 和 1.1 版本,请使用 CLSID_CorRuntimeHost 和 IID_ICorRuntimeHost 来获取 ICorRuntimeHost 接口。

   //启动CLR
   pClrHost->Start();
   DWORD retVal=0;


   hr = pClrHost->ExecuteInDefaultAppDomain(L"SPWSInvokeDll.dll",L"SPWSInvokeDll.Class1",L"TestMethod",
      L"TestStringParam",&retVal);

   CString strRetVal;
   strRetVal.Format(L"%d", retVal);

   if(S_OK==hr)
      AfxMessageBox(strRetVal);
   else
      AfxMessageBox(L"error");
}

这里有个缺陷,似乎不能将CLR unload,ICLRRuntimeHost提供的stop函数没有解决任何问题——参考(2)。

 

参考:

(1) http://msdn.microsoft.com/zh-cn/vstudio/9x0wh2z3(VS.90).aspx

(2) http://social.msdn.microsoft.com/Forums/en-NZ/netfxtoolsdev/thread/3e51f21e-ee4b-4a72-812e-ef6b4c3bb0dc

转载于:https://www.cnblogs.com/huangyong9527/archive/2010/11/30/1892165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值