国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++與C#混合生成.NET程序

2019-11-18 17:17:01
字體:
來源:轉載
供稿:網友

  本文提供了一個方法,讓C++源碼和C#源碼一起編譯鏈接成一個單一的Assembly。
  由于C++提供了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來完成。
  由于這個例子很簡單,我用命令行來創建這個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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 同仁县| 阳新县| 牟定县| 葵青区| 阿巴嘎旗| 侯马市| 缙云县| 阿瓦提县| 界首市| 包头市| 玉门市| 罗平县| 诸城市| 拉孜县| 陵水| 江山市| 开鲁县| 临海市| 鄂州市| 新津县| 昌宁县| 兴国县| 新沂市| 拉萨市| 高陵县| 景德镇市| 台湾省| 扶绥县| 东阿县| 盐池县| 鄢陵县| 青浦区| 綦江县| 固安县| 阳信县| 方山县| 无为县| 卓资县| 鹤岗市| 清涧县| 怀远县|