VcCallC#_02
1、VC代码:(vs2013运行正常)
// ConsoleApplication_CallCS.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" /*
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
//*/ /*
#include <SDKDDKVer.h> #include <stdio.h>
#include <tchar.h>
#include <windows.h> #include <metahost.h>
#include <mscoree.h>
#pragma comment(lib, "mscoree.lib") int _tmain(int argc, _TCHAR* argv[])
{
ICLRMetaHost *pMetaHost = nullptr;
ICLRMetaHostPolicy *pMetaHostPolicy = nullptr;
ICLRRuntimeHost *pRuntimeHost = nullptr;
ICLRRuntimeInfo *pRuntimeInfo = nullptr; HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
//hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
hr = pMetaHost->GetRuntime(L"vv2.0.50727", IID_PPV_ARGS(&pRuntimeInfo)); if (FAILED(hr))
{
goto cleanup;
} hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pRuntimeHost)); hr = pRuntimeHost->Start(); DWORD dwRet = 0;
//hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"SampleManagedApp.exe",
// L"SampleManagedApp.Program",
// L"Test",
// L"Hello World!",
// &dwRet);
hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"ClassLibrary4VC.dll",
L"ClassLibrary4VC.ClassLibraryTest01",
L"ClassLibraryFunc01",
L"Hello World!",
&dwRet); hr = pRuntimeHost->Stop(); cleanup:
if (pRuntimeInfo != nullptr)
{
pRuntimeInfo->Release();
pRuntimeInfo = nullptr;
} if (pRuntimeHost != nullptr)
{
pRuntimeHost->Release();
pRuntimeHost = nullptr;
} if (pMetaHost != nullptr)
{
pMetaHost->Release();
pMetaHost = nullptr;
} system("pause");
}
//*/ //CorBindToRuntimeEx
// https://msdn.microsoft.com/zh-cn/library/99sz37yh.aspx
// http://zhidao.baidu.com/link?url=L2NYvtj82SvXjqn6-Abatd6dyK3VdSta_DZAeqGqoRUCDcsvlXrxK-vnMUXq8RJQLSSSlHY1M6RTWLHTzJJSvcuipSwuhGwkFFCWcZBZpGG
// http://blog.csdn.net/hadstj/article/details/34823905 #include <SDKDDKVer.h> #include <stdio.h>
#include <tchar.h>
#include <windows.h> #include <metahost.h>
#include <mscoree.h>
#pragma comment(lib, "mscoree.lib") int _tmain(int argc, _TCHAR* argv[])
{
ICLRMetaHost *pMetaHost = nullptr;
ICLRMetaHostPolicy *pMetaHostPolicy = nullptr;
ICLRRuntimeHost *pRuntimeHost = nullptr;
ICLRRuntimeInfo *pRuntimeInfo = nullptr; //HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
////hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
//hr = pMetaHost->GetRuntime(L"vv2.0.50727", IID_PPV_ARGS(&pRuntimeInfo)); //if (FAILED(hr))
//{
// goto cleanup;
//} //hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pRuntimeHost)); // invoke the method that loads the CLR HRESULT hrCorBind = CorBindToRuntimeEx(
NULL, // CLR version - NULL load the latest available // L"v4.0.30319",
L"wks", // GCType ("wks" = workstation or "svr" = Server)
, // STARTUP_LOADER_SAFEMODE
CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost,
(PVOID*)&pRuntimeHost);
if (FAILED(hrCorBind))
{
printf("CorBindToRuntimeEx failed : %08X\n", hrCorBind);
goto cleanup;
}
// *** HRESULT hr = pRuntimeHost->Start();
if (FAILED(hr))
{
printf("pRuntimeHost->Start() failed : %08X\n", hr);
goto cleanup;
} DWORD dwRet = ;
//hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"SampleManagedApp.exe",
// L"SampleManagedApp.Program",
// L"Test",
// L"Hello World!",
// &dwRet);
hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"ClassLibrary4VC.dll",
L"ClassLibrary4VC.ClassLibraryTest01",
L"ClassLibraryFunc01",
L"Hello World!",
&dwRet);
if (FAILED(hr))
{
printf("pRuntimeHost->ExecuteInDefaultAppDomain failed : %08X\n", hr);
goto cleanup;
} WORD words[] = { };
words[] = ;
words[] = ;
words[] = ;
words[] = ;
words[] = ;
hr = pRuntimeHost->ExecuteInDefaultAppDomain(L"ClassLibrary4VC.dll",
L"ClassLibrary4VC.ClassLibraryTest01",
L"ClassLibraryFunc02",
(WCHAR*)&words[],
&dwRet); hr = pRuntimeHost->Stop();
if (FAILED(hr))
{
printf("pRuntimeHost->Stop() failed : %08X\n", hr);
goto cleanup;
} cleanup:
if (pRuntimeInfo != nullptr)
{
pRuntimeInfo->Release();
pRuntimeInfo = nullptr;
} if (pRuntimeHost != nullptr)
{
pRuntimeHost->Release();
pRuntimeHost = nullptr;
} if (pMetaHost != nullptr)
{
pMetaHost->Release();
pMetaHost = nullptr;
} system("pause");
}
2、
VcCallC#_02的更多相关文章
- 自学华为IoT物联网_02 常见物联网通信技术
点击返回自学华为IoT物流网 自学华为IoT物联网_02 常见物联网通信技术 两类技术: 有线通信技术 无线通信技术 一. 有线通信技术 1.1 物联网有线技术介绍及对比 ETH 主要用于支持以太网标 ...
- C#_02.16_基础七_.NET表达式&运算符
C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...
- C#_02.15_基础六_.NET类
C#_02.15_基础六_.NET类 一.类继承是一个类在另一个类的基础上进行的扩展. 继承的子类拥有父类的全部成员.索引子类拥有本身的全部成员以及父类的全部成员. 可以对基类成员进行隐藏,如果必须的 ...
- C#_02.14_基础五_.NET类
C#_02.14_基础五_.NET类 一.类实例: 我们前面说过类是一个模板,我们通过类创建一个又一个的实例,通常情况下类当中的变量是每一个实例都各有一份的,互相不影响,而静态字段是除外的,静态字段是 ...
- C#_02.13_基础四_.NET方法
C#_02.13_基础四_.NET方法 一.方法概述: 方法是一块具有名称的代码.可以通过方法进行调用而在别的地方执行,也可以把数据传入方法并接受数据输出. 二.方法的结构: 方法头 AND 方法 ...
- C#_02.13_基础三_.NET类基础
C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...
- C#_02.12_基础二_.NET类型存储和变量
C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...
- C#_02.10_基础一_.NET框架
C#_02.10_基础一_.NET框架 一.概念: .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境. 解读: 1..net框架是一个编程环境, 2.可以进行多语言的开发和 ...
- JavaScript实现表单验证_02
注册3次错误,最终的结果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
随机推荐
- testng入门教程11 TestNG运行JUnit测试
现在,您已经了解了TestNG和它的各种测试,如果现在担心如何重构现有的JUnit代码,那就没有必要,使用TestNG提供了一种方法,从JUnit和TestNG按照自己的节奏.也可以使用TestNG执 ...
- iOS 网易彩票-6设置模块三(常用小功能)
该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中.iOS-常用小功能介绍,请参考我的另一篇文章: iOS 常用小功能 总结:http://www.cnblog ...
- fontawesome与amazeUI
fontawesome是很不错的东西呢~~~~ amazeUI也是很不错的东西呢~~~~~ 最近一年里,比较偏爱这两个家伙? 什么?为什么bootstrap?有什么区别? 这个我还真说不太清楚. 用一 ...
- Python实现在给定整数序列中找到和为100的所有数字组合
摘要: 使用Python在给定整数序列中找到和为100的所有数字组合.可以学习贪婪算法及递归技巧. 难度: 初级 问题 给定一个整数序列,要求将这些整数的和尽可能拼成 100. 比如 [17, 1 ...
- 如何将TNJ的源代码添加到eclipse[转]
java编程思想第四版中net.mindview.util的jar包导入 在Java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewi ...
- 浅谈为什么一个java源文件中只能有一个public类?
声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...
- Js基础知识5-函数返回值、函数参数、函数属性、函数方法
函数返回值 所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样,return语句不会阻止finally子句的执行. function testF ...
- C++ 电路布线/最短路径问题
问题描述 用二维数组表示地图,若值为 1 则表示有障碍物,若值为 0 则表示可以通行. 输入: m*n 的二维数组,布线起点坐标,布线终点坐标. 输出: 最短布线距离以及对应的布线路径. 问题分析 从 ...
- 关于微信分享到朋友圈(Thinkphp-tp3.2框架下实现)
PHP部分 扩展类代码部分: <?php namespace Think; class JsSdk { private $appId; private $appSecret; public $d ...
- xargs 原理&使用
1. 简介 之所以能用到这个命令,是由于很多 linux 命令不支持用管道传递参数,例如 find /sbin -perm +700 | ls -l 这个命令是错误的 find /sbin -perm ...