C++的dll文件在C#中使用(非托管)

问题说明
因为C++的dll文件是非托管,所以想在C#中使用需要将C++中的dll函数动态调取到想变成的application中,且需要在c#中的unsafe块操作,C#中的参数类型需要根据c#中的格式进行更改 。共两种方法可让c++中的dll文件在c#中使用。

1.C++创建的dll库,需要用静态方法调用;
2.直接使用CLR,生成托管C++dll库;

因为c++和c#之间还是有数据类型的区别的,所以还需要类型转换。

二.动态调用方法

具体会用到这几个知识点。
1.将需要用到的所有函数都封装成unsafe类
因为c#和c++之间架构不同,怕程序溢出所以调用dll文件函数时需要在c#程序中使用unsafe。
①unsafe可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员函数内的局部变量。
②编译带有unsafe代码的程序也要在“configuration properties>build” 中把允许unsafe代码设为真。
举例:

unsafe class TestDll
{
   
	 [DllImport("NTControl.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
	 public static extern unsafe System.UInt32 NT_OpenSystem(ref UInt32 systemIndex,  string systemLocator, string options);
	 [DllImport("NTControl.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
	 public static extern unsafe System.UInt32  NT_GetNumberOfChannels(System.UInt32 systemIndex, System.UInt32* channels);
	 [DllImport("NTControl.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention =
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值