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

    最近开始学习 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("192.168.0.1"));
 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


来自:http://blog.csdn.net/felixz/archive/2006/05/17/742867.aspx

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值