本文提供了一个方法,让C++源码和C#源码一起编译链接成一个单一的Assembly。
  由于M$的C++/CLI提供了IJW方法,允许将旧有C++代码也编译成托管代码,因此这篇小文可以用极小的工作量来彻底解决所有C++遗留代码移植到.NET的问题。
  这个方法,再加上前次的小文《您也使用托管C++吗?》,就可以把C++遗留代码移植到.NET的所有方法一网打尽了。

  好了,言归正传。
  假设一个很简单的C++程序,它只有一个函数:

//c.h
#pragma once
int sqr(int n);
//c.cpp
#include "c.h"
int sqr(int n)
{
  return n*n;
}

  为了能让它与C#共同工作,必须为它加个.NET的包装:

    //wrapper.cpp

#include "c.h"
namespace wrapper
{
  public ref class calc
  {
  public:
      static int sqr(int n)
    {
      return ::sqr(n);
    }
  };
}

  现在可以用C#去调用它了:

    //cs.cs
using System;
namespace test
{
  public class Program
  {
    public static void Main()
    {
      Console.WriteLine(wrapper.calc.sqr(11));
    }
  }
}

  现在,如何将这些源码编译成一个exe文件呢?
  用集成环境是很难的,最方便的,还是创建一个makefile或MSBuild来完成。
  由于这个例子很简单,我用命令行来创建这个exe文件:

  cl c.cpp wrapper.cpp /c /clr
  生成 c.obj 和 wrapper.obj

  csc /addmodule:wrapper.obj /target:module /out:cs.netmodule cs.cs
  生成 cs.netmodule

  link c.obj wrapper.obj cs.netmodule /LTCG /Subsystem:Console /entry:test.Program.Main /out:o.exe
  生成 o.exe

  运行 o.exe 显示结果:121

------
C++与C#混合生成.NET程序

  参考资料:
  1.   .netmodule Files as Linker Input   http://msdn2.microsoft.com/en-us/library/k669k83h(VS.80).aspx 
  2.   选择 .netmodule 输入文件的格式 http://msdn2.microsoft.com/zh-CN/library/0zyh2sf2(VS.80).aspx

后记:(2006-04-19)

  今天特意上网查了一下,发现已经有这个介绍了。大家参考一下。
  原文地址:http://blog.joycode.com/junfeng/archive/2005/05/25/51838.aspx?Pending=true

让C++代码与C#代码一起生成一个单一的Assembly相关推荐

  1. c语言计算机猜数字100以内,求一个猜数字C语言代码,要求如下 计算机生成一个100以内的随机数,玩家来猜 记录猜的次数,最后打...

    满意答案 itpotato 推荐于 2017.10.09 采纳率:51%    等级:12 已帮助:4600人 /* *百度知道越来越水了,这么简单的题就一个回答 *没见过限定头文件数目的..而且是限 ...

  2. linux打包运行python文件_Linux下安装pyinstaller用于将py文件打包生成一个可执行文件...

    安装使用流程 1. 首先给系统装个easy_install, 如果装了的可以跳过这步 到pypi官方网址 https://pypi.python.org/pypi/setuptools 去downlo ...

  3. 使用Visual Studio宏来自动生成代码 [ Visual Studio | 宏 | 自动生成代码 ]

    前言 宏的定义:是组合到一起形成一个命令以自动完成某项任务的一系列命令和指令.(MSDN) 在使用Visual Studio宏实现JS折叠功能的时候就想过用它来实现代码自动生成,有了前面的基础,实现起 ...

  4. AIDE支持实时错误检查、代码重构、代码智能导航、生成APK

    AIDE是一个Android Java集成开发环境,可以在Android系统内进行Android软件和游戏的开发.它不仅仅是一个编辑器,而是支持编写-编译-调试运行整个周期,开发人员可以在Androi ...

  5. python有趣的简单代码_简单代码一学就会,Python生成GIF动图

    文/IT可达鸭 图/IT可达鸭.网络 前言 最近在写技术文档的时候,发现一个问题.对于每个技术步骤,都需要一个截图,这样下来整篇文档都是截图,显得不是特别的专业. 为了解决这个问题,我想到一个方法,就 ...

  6. python自动导出数据脚本_使用python生成一个导出数据库的bat脚本文件的示例代码...

    这篇文章分享使用python生成一个导出数据库的bat脚本文件的示例代码 实例如下:# 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库 ...

  7. javadoc文档的生成方法_Cocoa 代码注释与文档生成

    Cocoa 代码注释与文档生成 本文的文档规范部分的内容参考自:NSHipster 的 Swift Documentation 作者 & Nate Cook 本文知识目录 背景 曾经以为好的代 ...

  8. 生成一个点开跳出情人节快乐和鲜花的python代码文件

    可以使用 Python 中的 print 函数来生成一个简单的 "情人节快乐和鲜花" 的消息. 以下是一个示例代码: print("情人节快乐!献上我最真挚的祝福和一束鲜 ...

  9. java代码:双色球号随机生成(极其简洁!)

    https://blog.csdn.net/qq_40677004/article/details/79699270 原 java代码:双色球号随机生成(极其简洁!) 2018年03月26日 15:5 ...

最新文章

  1. Linux NUMA 架构 :基础软件工程师需要知道一些知识
  2. Docker系列 四.Docker部署SpringBoot
  3. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展
  4. java切割文件_Java如何将大文件切割成小文件
  5. 手机app常见bug积累
  6. 【Qt】Qt登录对话框(纯代码实现)
  7. HEXA机器人荣获CES Asia2018 创新奖
  8. 数据结构学习笔记:利用Python列表实现栈结构
  9. cicd持续集成全程_CICD-持续集成amp;持续交付
  10. delphi 算术溢出解决方法_文言文代码算什么?跟着九章算术学Python编程才厉害...
  11. C语言(面积计算器)不能输入负数[程序以要求]
  12. 《圈圈教你玩USB》 第七章 USB MIDI键盘 看书笔记
  13. COMMUNITY DETECTION
  14. 蓦然回首,灯火阑珊——自考总结
  15. 基于python英文文件名批量翻译并重命名
  16. 使用moment.js获取一个自然周开始日期和结束日期
  17. 这些实用的手机小技巧分享给你
  18. 字符串匹配/模糊匹配(查找/模糊查找)的算法
  19. 中国电热水器行业发展现状及趋势分析,头部厂商市场份额进一步上升「图」
  20. 谷粒商城三阶段课件_谷粒商城分布式基础篇一

热门文章

  1. Confluence 6 修改日志文件的大小数量和级别
  2. 一步步实现 Redis 搜索引擎 1
  3. 《精通软件性能测试与LoadRunner最佳实战》—第1章1.1节软件测试基础
  4. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...
  5. mine layer(2008 World Final C)
  6. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
  7. 三层交换机关于VLAN的划分以及ACL的使用
  8. webpack2中postcss-loader报错noconfigfound
  9. 实验12:Problem A: 你会定义类吗?
  10. 8086汇编学习小记-1