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" ...
随机推荐
- node初识——node中的require方法与require.js的区别
出处:http://blog.csdn.net/u013613428/article/details/51966500 作为一个前端的新手,总是诧异于js的模块载入方式,看到了通过requireJs提 ...
- 【最大连接数】Linux的文件最大连接数
Too many open files ==================================== 查看当前操作系统连接数设置 ulimit -a =================== ...
- Spring Security中异常上抛机制及对于转型处理的一些感悟
在使用Spring Security的过程中,我们会发现框架内部按照错误及问题出现的场景,划分出了许许多多的异常,但是在业务调用时一般都会向外抛一个统一的异常出来,为什么要这样做呢,以及对于抛出来的异 ...
- A7架构
以Cortex-A7 MPCore processor来进行说明,这是一款主打低功耗的多核处理器,采用ARMv7-A架构,最多支持4个core. 每个core都有L1级的Cache,分为instruc ...
- Makefile小结
Makefile最基本的规则:target....:prerequisites..... command 或:target....:prerequisites.....;command target: ...
- 持续集成之二:搭建SVN服务器(subversion)
安装环境 Red Hat Enterprise Linux Server release 7.3 (Maipo) jdk1.7.0_80 subversion-1.10.3.tar.gz apr-1. ...
- Linux下DNS服务器配置
一步:yum install -y bind bind-utils bind-chroot yum install bind* //安装DNS服务 第二步:systemctl stop firewal ...
- Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!
Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!找到你自己感兴趣的点进行切入,并找到兴趣点进行自我驱动是最好的学习方式! 推荐两本书,一本作为 ...
- 计算概论(A)/基础编程练习1(8题)/6:判断闰年
#include<stdio.h> int isLeap(int year) { // 必须先判断是平年的情况 后判断闰年的情况 == && year%!=) || yea ...
- Confluence5.8更改数据库配置
Confluence5.8更改数据库配置 第一步:是找到confluence的安装目录,我的安装目录在 /opt/atlassian/: 第二步:由于confluence把tomcat给改造了,所以c ...