1、VC代码:(vs2013运行正常)

  1. // ConsoleApplication_CallCS.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. /*
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9. return 0;
  10. }
  11. //*/
  12.  
  13. /*
  14. #include <SDKDDKVer.h>
  15.  
  16. #include <stdio.h>
  17. #include <tchar.h>
  18. #include <windows.h>
  19.  
  20. #include <metahost.h>
  21. #include <mscoree.h>
  22. #pragma comment(lib, "mscoree.lib")
  23.  
  24. int _tmain(int argc, _TCHAR* argv[])
  25. {
  26. ICLRMetaHost *pMetaHost = nullptr;
  27. ICLRMetaHostPolicy *pMetaHostPolicy = nullptr;
  28. ICLRRuntimeHost *pRuntimeHost = nullptr;
  29. ICLRRuntimeInfo *pRuntimeInfo = nullptr;
  30.  
  31. HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
  32. //hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
  33. hr = pMetaHost->GetRuntime(L"vv2.0.50727", IID_PPV_ARGS(&pRuntimeInfo));
  34.  
  35. if (FAILED(hr))
  36. {
  37. goto cleanup;
  38. }
  39.  
  40. hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pRuntimeHost));
  41.  
  42. hr = pRuntimeHost->Start();
  43.  
  44. DWORD dwRet = 0;
  45. //hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"SampleManagedApp.exe",
  46. // L"SampleManagedApp.Program",
  47. // L"Test",
  48. // L"Hello World!",
  49. // &dwRet);
  50. hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"ClassLibrary4VC.dll",
  51. L"ClassLibrary4VC.ClassLibraryTest01",
  52. L"ClassLibraryFunc01",
  53. L"Hello World!",
  54. &dwRet);
  55.  
  56. hr = pRuntimeHost->Stop();
  57.  
  58. cleanup:
  59. if (pRuntimeInfo != nullptr)
  60. {
  61. pRuntimeInfo->Release();
  62. pRuntimeInfo = nullptr;
  63. }
  64.  
  65. if (pRuntimeHost != nullptr)
  66. {
  67. pRuntimeHost->Release();
  68. pRuntimeHost = nullptr;
  69. }
  70.  
  71. if (pMetaHost != nullptr)
  72. {
  73. pMetaHost->Release();
  74. pMetaHost = nullptr;
  75. }
  76.  
  77. system("pause");
  78. }
  79. //*/
  80.  
  81. //CorBindToRuntimeEx
  82. // https://msdn.microsoft.com/zh-cn/library/99sz37yh.aspx
  83. // http://zhidao.baidu.com/link?url=L2NYvtj82SvXjqn6-Abatd6dyK3VdSta_DZAeqGqoRUCDcsvlXrxK-vnMUXq8RJQLSSSlHY1M6RTWLHTzJJSvcuipSwuhGwkFFCWcZBZpGG
  84. // http://blog.csdn.net/hadstj/article/details/34823905
  85.  
  86. #include <SDKDDKVer.h>
  87.  
  88. #include <stdio.h>
  89. #include <tchar.h>
  90. #include <windows.h>
  91.  
  92. #include <metahost.h>
  93. #include <mscoree.h>
  94. #pragma comment(lib, "mscoree.lib")
  95.  
  96. int _tmain(int argc, _TCHAR* argv[])
  97. {
  98. ICLRMetaHost *pMetaHost = nullptr;
  99. ICLRMetaHostPolicy *pMetaHostPolicy = nullptr;
  100. ICLRRuntimeHost *pRuntimeHost = nullptr;
  101. ICLRRuntimeInfo *pRuntimeInfo = nullptr;
  102.  
  103. //HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
  104. ////hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
  105. //hr = pMetaHost->GetRuntime(L"vv2.0.50727", IID_PPV_ARGS(&pRuntimeInfo));
  106.  
  107. //if (FAILED(hr))
  108. //{
  109. // goto cleanup;
  110. //}
  111.  
  112. //hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pRuntimeHost));
  113.  
  114. // invoke the method that loads the CLR
  115.  
  116. HRESULT hrCorBind = CorBindToRuntimeEx(
  117. NULL, // CLR version - NULL load the latest available // L"v4.0.30319",
  118. L"wks", // GCType ("wks" = workstation or "svr" = Server)
  119. , // STARTUP_LOADER_SAFEMODE
  120. CLSID_CLRRuntimeHost,
  121. IID_ICLRRuntimeHost,
  122. (PVOID*)&pRuntimeHost);
  123. if (FAILED(hrCorBind))
  124. {
  125. printf("CorBindToRuntimeEx failed : %08X\n", hrCorBind);
  126. goto cleanup;
  127. }
  128. // ***
  129.  
  130. HRESULT hr = pRuntimeHost->Start();
  131. if (FAILED(hr))
  132. {
  133. printf("pRuntimeHost->Start() failed : %08X\n", hr);
  134. goto cleanup;
  135. }
  136.  
  137. DWORD dwRet = ;
  138. //hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"SampleManagedApp.exe",
  139. // L"SampleManagedApp.Program",
  140. // L"Test",
  141. // L"Hello World!",
  142. // &dwRet);
  143. hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"ClassLibrary4VC.dll",
  144. L"ClassLibrary4VC.ClassLibraryTest01",
  145. L"ClassLibraryFunc01",
  146. L"Hello World!",
  147. &dwRet);
  148. if (FAILED(hr))
  149. {
  150. printf("pRuntimeHost->ExecuteInDefaultAppDomain failed : %08X\n", hr);
  151. goto cleanup;
  152. }
  153.  
  154. WORD words[] = { };
  155. words[] = ;
  156. words[] = ;
  157. words[] = ;
  158. words[] = ;
  159. words[] = ;
  160. hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"ClassLibrary4VC.dll",
  161. L"ClassLibrary4VC.ClassLibraryTest01",
  162. L"ClassLibraryFunc02",
  163. (WCHAR*)&words[],
  164. &dwRet);
  165.  
  166. hr = pRuntimeHost->Stop();
  167. if (FAILED(hr))
  168. {
  169. printf("pRuntimeHost->Stop() failed : %08X\n", hr);
  170. goto cleanup;
  171. }
  172.  
  173. cleanup:
  174. if (pRuntimeInfo != nullptr)
  175. {
  176. pRuntimeInfo->Release();
  177. pRuntimeInfo = nullptr;
  178. }
  179.  
  180. if (pRuntimeHost != nullptr)
  181. {
  182. pRuntimeHost->Release();
  183. pRuntimeHost = nullptr;
  184. }
  185.  
  186. if (pMetaHost != nullptr)
  187. {
  188. pMetaHost->Release();
  189. pMetaHost = nullptr;
  190. }
  191.  
  192. system("pause");
  193. }

2、

VcCallC#_02的更多相关文章

  1. 自学华为IoT物联网_02 常见物联网通信技术

    点击返回自学华为IoT物流网 自学华为IoT物联网_02 常见物联网通信技术 两类技术: 有线通信技术 无线通信技术 一. 有线通信技术 1.1 物联网有线技术介绍及对比 ETH 主要用于支持以太网标 ...

  2. C#_02.16_基础七_.NET表达式&运算符

    C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...

  3. C#_02.15_基础六_.NET类

    C#_02.15_基础六_.NET类 一.类继承是一个类在另一个类的基础上进行的扩展. 继承的子类拥有父类的全部成员.索引子类拥有本身的全部成员以及父类的全部成员. 可以对基类成员进行隐藏,如果必须的 ...

  4. C#_02.14_基础五_.NET类

    C#_02.14_基础五_.NET类 一.类实例: 我们前面说过类是一个模板,我们通过类创建一个又一个的实例,通常情况下类当中的变量是每一个实例都各有一份的,互相不影响,而静态字段是除外的,静态字段是 ...

  5. C#_02.13_基础四_.NET方法

    C#_02.13_基础四_.NET方法 一.方法概述: 方法是一块具有名称的代码.可以通过方法进行调用而在别的地方执行,也可以把数据传入方法并接受数据输出. 二.方法的结构: 方法头  AND  方法 ...

  6. C#_02.13_基础三_.NET类基础

    C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...

  7. C#_02.12_基础二_.NET类型存储和变量

    C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...

  8. C#_02.10_基础一_.NET框架

    C#_02.10_基础一_.NET框架 一.概念: .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境. 解读: 1..net框架是一个编程环境, 2.可以进行多语言的开发和 ...

  9. JavaScript实现表单验证_02

    注册3次错误,最终的结果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

随机推荐

  1. mysql表空间文件

    1.共享表空间文件.默认表空间文件是ibdata1,大小为10M,且可拓展.共享表空间可以由多个文件组成,一个表可以跨多个文件而存在,共享表空间的最大值限制是64T. 2.独立表空间文件.独立表空间只 ...

  2. nginx安装,反向代理配置

    1.centos 版本 下载最新稳定版 https://www.nginx.com/resources/wiki/start/topics/tutorials/install/# 2.执行语句: ./ ...

  3. suiyi

    <?php namespace app\controllers; use Yii;use app\models\Device;use app\models\DeviceSearch;use ap ...

  4. mvn deploy 推送到私有仓库,注意当前日期

    由于更改了本机系统时间到过去的一个时间,导致mvn deploy推送到私有仓库后,该更新的jar包时间戳比较旧,客户端不能更新得到新的jar包.

  5. linux常用命令:ss 命令

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...

  6. js 变量 作用域及内存

    由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...

  7. Linux基础命令---mkisofs

    mkisofs mkisofs指令可以创建ISO9660/Joliet/HFS文件系统,现在使用指令genisoimage代替它.genisoImage是一个预掌握程序,用于生成iso 9660/jo ...

  8. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  9. CSS前叙

    1 css是什么?层叠样式表,修饰网页结构2 如何去使用css?a.在html网页中,加入一个style标签,在这个style标签里面写css代码b.可以直接把style里面的代码放到一个单独的文件中 ...

  10. 计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根

    #include<stdio.h> #include<math.h> int main() { // 待解方程数目 int n; scanf("%d", & ...