`
sfeve
  • 浏览: 43855 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C#中调用C++的DLL文件

    博客分类:
  • C++
阅读更多

这几天公司需要做一个通过刷卡来控制用户上网的功能。我先扩展了windows DDK的passthru源码包,生成了一个NDIS中间层驱动文件。接下来就要写程序控制这个驱动,以达到上网控制的目的。

 

控制程序是用C++代码完成的,先编译成动态链接库(dll)文件。编译的过程就不再废话了,网上很多。这里提示一点就是开始建立MFC dll工程的时候,应该选择“动态链接库和MFC静态链接”这一项,这样编译出来的dll文件是不需要引入库文件(.lib)的。

 

生成好后,得到dll文件(如ForbidNetDll.dll),写一个简单的C#类,例如前面的dll文件导出函数为int forbidNet(int flag); C#类应该这样写:

 

// NetControl.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices; // 这句必不可少

namespace NetControl {
    public class NetControl {
        [DllImport("ForbidNetDll.dll", EntryPoint = "forbidNet", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        public static extern int forbidNet(int flag);
    }
}

 

然后把NetControl.cs和ForbidNetDll.dll一同拷贝到vs环境的目录下,用csc命令编译:

 

csc /t:library /out:NetControl.dll NetControl.cs

 

 

这样就生成了NetControl.dll这个C#可以直接引用的dll文件。当然最后运行的时候ForbidNetDll.dll也得拷贝到工程目录下。因为NetControl.dll运行的时候,执行方法forbidNet时需要去ForbidNetDll.dll中找。

 

最后就是写测试程序测试我们的NetControl.dll了。Just relax!

分享到:
评论
2 楼 mathgl 2011-03-13  
为啥要用mfc呢???
1 楼 piao_bo_yi 2011-03-12  
导出函数是容易的,导出类可以试一试。

相关推荐

    c#调用c++DLL,dll有二维数组

    标题中的“c#调用c++DLL,dll有二维数组”意味着我们将在C++的DLL中定义一个二维数组,然后在C#中调用该函数并处理这个数组。在C++中,二维数组通常以指针的形式传递,因为C++不支持引用参数。而在C#中,我们通常...

    C#调用C++DLL导出类

    总结来说,C#调用C++DLL中的类主要涉及以下几个步骤: 1. 在C++DLL中定义导出类及其方法。 2. 在C#中使用DllImport加载DLL,并定义C风格的函数接口。 3. 创建一个C#托管类,持有C++对象的指针,并提供相应的C#方法...

    C#调用C++的动态库Dll示例(含UsbLibDotNet使用)

    1.C#调用C++封装的动态库dll 2.结构体含union共同体的C++转C#示例 3.C#结构体指针的调用演示 4.C#读取USB数据设备的示例 5.C#动态调用C++dll库示例 6.C#静态调用C++dll库示例 注意:UsbLibDotNet使用时候需要先安装...

    C#调用C++动态DLL

    在C#中调用C++编写的动态链接库(DLL)是一种常见的跨语言通信方式,特别是当C++库提供了某些C#中没有的功能或者优化的性能时。本文将详细探讨如何在C#中实现对C++动态DLL的调用。 首先,了解动态链接库(DLL)的...

    C# 调用C++DLL(函数参数包含指针)

    总结来说,C#调用C++DLL并处理指针参数涉及到P/Invoke、函数原型声明、指针类型映射、内存管理和异常处理等多个环节。理解这些细节是成功进行跨语言互操作的关键。在实际开发中,务必确保所有操作都遵循安全规范,以...

    C#Winform动态调用C++和C#的Dll

    本文将重点讲解如何在C#的Winform应用中动态调用C++和C#编写的DLL,并将DLL作为嵌入资源处理,避免因丢失DLL文件而引发的问题。 首先,我们需要理解DLL的工作原理。DLL文件包含可执行代码和数据,当一个应用程序...

Global site tag (gtag.js) - Google Analytics