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" ...
随机推荐
- mysql表空间文件
1.共享表空间文件.默认表空间文件是ibdata1,大小为10M,且可拓展.共享表空间可以由多个文件组成,一个表可以跨多个文件而存在,共享表空间的最大值限制是64T. 2.独立表空间文件.独立表空间只 ...
- nginx安装,反向代理配置
1.centos 版本 下载最新稳定版 https://www.nginx.com/resources/wiki/start/topics/tutorials/install/# 2.执行语句: ./ ...
- suiyi
<?php namespace app\controllers; use Yii;use app\models\Device;use app\models\DeviceSearch;use ap ...
- mvn deploy 推送到私有仓库,注意当前日期
由于更改了本机系统时间到过去的一个时间,导致mvn deploy推送到私有仓库后,该更新的jar包时间戳比较旧,客户端不能更新得到新的jar包.
- linux常用命令:ss 命令
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- js 变量 作用域及内存
由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...
- Linux基础命令---mkisofs
mkisofs mkisofs指令可以创建ISO9660/Joliet/HFS文件系统,现在使用指令genisoimage代替它.genisoImage是一个预掌握程序,用于生成iso 9660/jo ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...
- CSS前叙
1 css是什么?层叠样式表,修饰网页结构2 如何去使用css?a.在html网页中,加入一个style标签,在这个style标签里面写css代码b.可以直接把style里面的代码放到一个单独的文件中 ...
- 计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根
#include<stdio.h> #include<math.h> int main() { // 待解方程数目 int n; scanf("%d", & ...