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" ...
随机推荐
- C# winform webbrowser如何指定内核为IE11? 输出 this.webbrowser.Version 显示版本是IE11的,但实际版本不是啊! 网上打的修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULA
最佳答案 1)假设你应用程序的名字为MyApplication.exe 2)运行Regedit,打开注册表,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\M ...
- 企业中如何批量更改mysql中表的存储引擎?
一.首先必须熟悉Mysql中有哪些基本的数据库,在mysql中database等价于schema,默认的基本库有四个:mysql,information_schema,performance_sche ...
- IO(字节流)
1. 字节流类以InputStream 和 OutputStream为顶层类,他们都是抽象类(abstract) 2. 最重要的两种方法是read()和write(),它们分别对数据的字节进行读写.两 ...
- wamp下配置多域名和访问路径的方法
wamp下配置多域名和访问路径的方法 1.到安装目录下,打开配置httpd.confD:\wamp\bin\apache\Apache2.2.21\conf\httpd.conf也可以通过wamp图标 ...
- JavaScript位运算符
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...
- java多线程----线程池源码分析
http://www.cnblogs.com/skywang12345/p/3509954.html 线程池示例 在分析线程池之前,先看一个简单的线程池示例. 1 import java.util.c ...
- Python 除法运算
Python中的除法较其它语言显得非常高端,有套很复杂的规则.Python中的除法有两个运算符,/和// 首先来说/除法: 在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差 ...
- Java高并发高性能分布式框架从无到有微服务架构设计
微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成 ...
- C/C++笔记 #035# Makefile
相关资料: Understanding roles of CMake, make and GCC GCC and Make ( A simple tutorial, teaches u how to ...
- Linux(RedHat) 开机时修改root密码
全程上图 开机的时候看到以下的界面, 按e进入编辑界面 然后就看到这个 再按一下e, 选择第二项 选中第二项后按e进入编辑界面, 输入single(记得有空格),然后回车, single就是启动单用户 ...