// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream>
#include <metahost.h>
#include <atlbase.h>
#include <atlcom.h> #pragma comment(lib, "mscoree.lib") #define IfFailRet(expr) { hr = (expr); if(FAILED(hr)) return (hr); }
#define IfNullFail(expr) { if (!expr) return (E_FAIL); } extern "C" int __declspec(dllexport) CALLBACK CallClrMethod(
const WCHAR *miniRuntimeVersion,
const WCHAR *assemblyName,
const WCHAR *typeName,
const WCHAR *methodName,
const WCHAR *args,
LPDWORD pdwResult
)
{
int hr = S_OK;
CComPtr<ICLRMetaHost> spHost;
hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&spHost));
CComPtr<ICLRRuntimeInfo> spRuntimeInfo;
CComPtr<IEnumUnknown> pRunTimes;
IfFailRet(spHost->EnumerateInstalledRuntimes(&pRunTimes));
ICLRRuntimeInfo *pUnkRuntime = NULL;
ULONG fetched = ;
wchar_t version[];
DWORD versionStringSize = ;
while (S_OK == pRunTimes->Next(, (IUnknown **)&pUnkRuntime, &fetched))
{
if (fetched <= || pUnkRuntime == nullptr)
break; hr = pUnkRuntime->GetVersionString(version, &versionStringSize); if (versionStringSize >=
&& (int)version[] >= (int)miniRuntimeVersion[]
&& (int)version[] >= (int)miniRuntimeVersion[]
&& (int)version[] >= (int)miniRuntimeVersion[]) {
CComQIPtr<ICLRRuntimeInfo> pp(pUnkRuntime);
spRuntimeInfo = pp;
break;
}
} IfNullFail(spRuntimeInfo); BOOL bStarted;
DWORD dwStartupFlags;
hr = spRuntimeInfo->IsStarted(&bStarted, &dwStartupFlags); CComPtr<ICLRRuntimeHost> spRuntimeHost;
IfFailRet(spRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&spRuntimeHost)));
if (!bStarted)
hr = spRuntimeHost->Start();
hr = spRuntimeHost->ExecuteInDefaultAppDomain(
assemblyName,
typeName,
methodName,
args,
pdwResult); return hr;
} int main()
{
DWORD dwResult;
HRESULT hr = CallClrMethod(
L"4.0",
L"ClassLibrary1.dll", // name of DLL (can be fullpath)
L"ClassLibrary1.Class1", // name of managed type
L"ManagedMethodCalledFromExtension", // name of static method
L"some args xx",
&dwResult); return ;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ClassLibrary1
{
public class Class1
{
/// <summary>
/// a managed static method that gets called from native code
/// </summary>
public static int ManagedMethodCalledFromExtension(string args)
{
// need to return an integer: the length of the args string
return args.Length * ;
} }
}

此项目加入了Reactor加壳保护,在编译后事件中添加命令:

"C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.Console.exe" -file "$(TargetPath)" -targetfile "<AssemblyLocation>\<AssemblyFileName>"

c++调用c#代码的更多相关文章

  1. 如何实现 javascript “同步”调用 app 代码

    在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些 ...

  2. 1.JAVA中使用JNI调用C++代码学习笔记

    Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI?  Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...

  3. 股票数据调用示例代码php

    <!--?php // +---------------------------------------------------------------------- // | JuhePHP ...

  4. 在HTML标签<a/>中调用javascript代码

    <a/>标签的“href”属性可以是一个有效的URL,表示跳转的目的地,除此之外,href还可以是一段javascript代码.当为“href”设置javascript代码时,格式如下:& ...

  5. 在Java中直接调用js代码(转载)

    http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...

  6. java调用python代码

    同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...

  7. Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示

    如下为本人亲证代码: 一: 编译器的安装与配置(环境不同,显示结果不同) 要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C++编译器: 5.0.6.0 ...

  8. 在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...

  9. C#调用Java代码

    c#直接调用java代码,需要ikvmbin-0.44.0.5.zip.下载地址: http://pan.baidu.com/share/link?shareid=3996679697&uk= ...

  10. [转]Asp.Net调用前台js调用后台代码分享

    1.C#前台js调用后台代码 前台js <script type="text/javascript" language="javascript"> ...

随机推荐

  1. js放大镜特效

    在平时网上商城购物时,我们能够通过放大镜效果来使我们看图片能够更加的清楚,今天我就来给大家分享一下我学习的放大镜特效 下图是原图的样子                                 ...

  2. Apache 用户认证

    基本认证(Basic) 摘要认证(Digest) 更安全 创建一个名为 users 的认证口令: htpasswd    -c   /usr/local/apache2/conf/users sam ...

  3. if [ $? -eq 0 ]; then该语句是什么含义?

    某个shell脚本 # mkimage.sh echo "make and copy android images" ./mkimage.sh ]; then echo " ...

  4. Protobuf(一)——Protobuf简介

    Protobuf简介 ​ 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: ​ Google Protocol Buffer( 简称 Proto ...

  5. x86-x64寄存器及CallStack调用栈

    Intel 32位体系结构(简称IA32)处理器包含8个通用寄存器,如下图所示: EIP是指令寄存器,指向处理器下条等待执行的指令地址(代码段内的偏移量),每次执行完相应汇编指令EIP值就会增加.EI ...

  6. [Comet OJ - Contest #9 & X Round 3] Namid[A]me

    传送门 一开始读错题了,以为是\(\sum_{1\leq u\leq v\leq n}f(u,v)\),还疑惑这题这么简单怎么没人做( 实际上是\(\sum_{1\leq u\leq v\leq n} ...

  7. 【bzoj4551】【NOIP2016模拟7.11】树

    题目 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标 ...

  8. Spring 自动代理

    在传统的基于代理类的AOP实现中,每个代理都是通过ProxyFactoryBean织入切面代理,在实际开发中,非常多的Bean每个都配置ProxyFactoryBean开发维护量巨大.解决方案:自动创 ...

  9. linux运维、架构之路-tomcat日志切割工具 logrotate

    一.Logrotate简介 1.Logrotate实际就是对日志进行切割的小工具,他通过让用户来配置规则的方式,检测和处理日志文件.配合Cron可让处理定时化:2.Logrotate预制了大量判断条件 ...

  10. Codecombat 游戏攻略(计算机科学三)

    第二关 赋值运算符-=字符串拼串循环语句while // 你可以把字符串连起来,或者把数字连接到字符串. // 一起唱歌,使用字符串连接: // X potions of health on the ...