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

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:11:07
字體:
供稿:網(wǎng)友

  本文提供了一個方法,讓c++源碼和c#源碼一起編譯鏈接成一個單一的assembly。
  由于c++提供了ijw方法,允許將舊有c++代碼也編譯成托管代碼,因此這篇小文可以用極小的工作量來徹底解決所有c++遺留代碼移植到.net的問題。
  這個方法,再加上前次的小文《您也使用托管c++嗎?》,就可以把c++遺留代碼移植到.net的所有方法一網(wǎng)打盡了。

  好了,言歸正傳。
  假設(shè)一個很簡單的c++程序,它只有一個函數(shù):

//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);
    }
  };
}
  現(xiàn)在可以用c#去調(diào)用它了:

    //cs.cs
using system;
namespace test
{
  public class program
  {
    public static void main()
    {
      console.writeline(wrapper.calc.sqr(11));
    }
  }
}

  現(xiàn)在,如何將這些源碼編譯成一個exe文件呢?
  用集成環(huán)境是很難的,最方便的,還是創(chuàng)建一個makefile來完成。
  由于這個例子很簡單,我用命令行來創(chuàng)建這個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

  運(yùn)行 o.exe 顯示結(jié)果: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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 开封市| 缙云县| 定远县| 栖霞市| 阿拉善盟| 平泉县| 措美县| 明溪县| 龙江县| 松阳县| 大名县| 正定县| 大足县| 河北区| 彩票| 慈利县| 呼和浩特市| 怀化市| 汉中市| 文登市| 黄龙县| 满洲里市| 巴青县| 秦皇岛市| 水城县| 扎赉特旗| 讷河市| 团风县| 贞丰县| 西畴县| 阿坝| 怀来县| 保德县| 扎兰屯市| 泸西县| 新郑市| 天全县| 陵水| 上饶市| 通渭县| 鹤山市|