C++/C# 混合编程 (Mix code C++/C#)

原创 2006年05月17日 16:53:00

最近开始学习 C# WinForm 编程,想通过把过去用 C++/MFC 写的工程移植到 C# 来学习 C# 的开发过程。C#来建造窗口界面比 MFC 轻松许多,但是有很多底层的代码要移植到 C# 实在很麻烦而且没有必要,这部分代码还使用了第三方开发库 WinPcap,于是决定这部分代码依然保持在 C++ 。

Visual C++.net 是混合模式的,我们可以创建基于 CLR 的托管代码,也可以创建 Native 的本机代码。

在 Solution 里新建一个 Visual C++ -> CLR -> Class Library 项目,点击完成 Visual Studio 为我们创建了一个名字空间和一个类。

namespace cpplib {

 

 public ref class Class1

 {

  // TODO: Add your methods for this class here.

 public:

  Class1();

 };

}

 

我们将计划保持为 C++ code 的那部分功能封装成一个类,这里我只介绍其中一个方法。构造函数也是我加入的,向导并没有为我们创建它。现在在构造函数后面加入一个新的 public 的方法

  void ARPRun();

在托管 C++ 中必须为函数指定返回类型,因为托管 C++ 并无缺省返回 int 的规则。然后在 cpplib.cpp 文件中定义这个函数,

void cpplib::Class1::ARPRun()

{

 ULONG   ulLen = 6;

 ULONG   pulMac[2];

 HRESULT hr;

 char szIP[16];

 PBYTE pbHexMac = (PBYTE) pulMac;

 

 struct in_addr ia;

 size_t i, j;

 char * szMac = new char[ulLen*4];

 

 memset (pulMac, 0xff, sizeof (pulMac));

 u_long uaddr = ntohl(inet_addr(cf9 cf8 192.168.0.1cf9 cf9 ));

 IPAddr addr = htonl(uaddr);

 SendARP(addr, 0, pulMac, &ulLen);

 

}

 

Projects -> cpplib 加入引用。

在 form 的代码中  using cpplib;

private void toolStripButton1_Click(object sender, EventArgs e)

        {

            Class1 c1 = new Class1();

            c1.ARPRun();

        }

Build 通过, 运行没问题。Build Release 版,复制到其他安装 .net framework 2.0 的机器上运行 ok.

My Development Environment:

Windows XP Professional SP2/ Visual Studio 2005 Professional / .net framework 2.0

 

 

【混合编程】C#调用C++

之前在学校写写图个方便,现在上班了发现这种技术简直逆天,C++/CLR也写过,但是语法上就只好呵呵了,而且运行起来跟原生的C#感觉差很多。唯一的好处就是不用考虑托管与非托管的问题。临时写了个急用。...
  • XiaoY_H
  • XiaoY_H
  • 2016年03月10日 21:18
  • 5973

C#与C++的混合编程

【原创】C#与C++的混合编程 2009年03月08日 星期日 下午 08:10    关键词:C#,C++,CLR C++, managed C++,混合编程,DLL调用,F...
  • hrm_sz
  • hrm_sz
  • 2014年10月04日 12:50
  • 1996

【转贴】C++/C# 混合编程 (Mix code C++/C#)

    最近开始学习 C# WinForm 编程,想通过把过去用 C++/MFC 写的工程移植到 C# 来学习 C# 的开发过程。C#来建造窗口界面比 MFC 轻松许多,但是有很多底层的代码要移植到 ...
  • jo_say
  • jo_say
  • 2010年06月02日 21:43
  • 632

C#与C++混合编程---C++/CX语法

1. C++/CX语法 1.1 命名空间 在标准C++里面命名空间是为了防止类型的冲突,但在windows运行时中,使用C++编程需要给所有的程序类添加上命名空间,这是windows运行时的一种语...
  • u010129251
  • u010129251
  • 2015年03月28日 00:17
  • 1173

C#与C++/CLI混合编程

最近做项目用到了一个二维码识别的SDK,想在C#里做个界面去调用该库生成和解析二维码,原本之前做过在C#里调用DLL的研究,没想到这次的尝试会异常的艰难,听我慢慢说来。         先用go...
  • Plutus_Lee
  • Plutus_Lee
  • 2013年12月12日 22:01
  • 1755

【原创】C#与C++的混合编程--采用其中的第三种方法

http://hi.baidu.com/wpzhao/blog/item/df3bb645fd2e972ecefca3eb.html 【原创】C#与C++的混合编程2009年03月08日 星期日 下午...
  • carl2380
  • carl2380
  • 2010年05月04日 10:29
  • 1350

C#与C++混合编程之引用(一)

一、在.net平台上,调用dll文件有2种含义 调用托管dll,即你使用.net平台开发的dll,属于托管代码。调用非托管dll,即传统的dll,一般是C++,VB,DELPHI等等开发出来的,属于非...
  • guwenjin29
  • guwenjin29
  • 2016年09月21日 22:47
  • 1629

C#与C++的混合编程 之三 C++与C#的数据传递与类型转换

一、数据传递方法 1.基本数据类型的传递   函数参数和返回值可以是C#和C++的各种基本数据类型,如int, float, double, char(注意不是char*)等。   示例:   C#代...
  • fang1192801693
  • fang1192801693
  • 2015年11月29日 13:44
  • 2303

C/C++ 混合编程 互相调用

网上这方面介绍的不少,但是有点鱼龙混杂,对初学者而言,信息量太大,反而不容易直接找到自己想要并且正确的,现将比较好的资料整理下,并附上源代码,供初学者参考以及自己后期使用。两个推荐的原文地址,通俗点的...
  • shangguanyunlan
  • shangguanyunlan
  • 2016年12月02日 10:40
  • 557

SWIG入门 - c++ 同 c# 的混合编程

同C#的混合编程-SWIG入门 最后更新日期:2014-04-18  by kagula 环境:Windows8.1 64bits(英文版)、Visual Studio 2013 Update1(英文...
  • lee353086
  • lee353086
  • 2014年11月02日 10:44
  • 4713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++/C# 混合编程 (Mix code C++/C#)
举报原因:
原因补充:

(最多只允许输入30个字)