C#中使用DllImport调用C++dll

本文介绍了如何在C#项目中利用DllImport特性调用C++动态链接库(DLL)。通过示例展示C#与C++的函数签名匹配,包括基本类型和自定义struct的转换,并强调了在处理字符串和回调函数时需要注意的问题。另外,还探讨了DllImport使用绝对路径的限制及其解决方法。
摘要由CSDN通过智能技术生成

 为什么要在C#中调用C++的代码呢?比如我有一个C#项目要实现某种功能,同时我恰好有一个已经实现了这个功能的C++代码。我可以用C#重写一遍,当然如果工程比较大的话,用DllImport来调用C++的dll是一个更好的选择。

由于C++dll是非托管代码,我不能直接在C#工程中添加引用(会出错误提示)。命名空间System.Runtime.InteropServices提供了DllImport Attribute来动态加载非托管dll。

示例一:

C#

[DllImport("D:/UnitySocket.dll", EntryPoint="Unity_Connect")]

public static extern bool Unity_Connect(string ip, string port);

 

C++

extern C {

public XXX(类似FAR的一个声明值,忘了明天补上) bool Unity_Connect(string ip, string port);

 

将以上的函数声明放入一个类中,然后就可以用 类名.Unity_Connect("xxxx", "xx")来调用了。

关于C#与C++内置类型的对照,我的C++分类里的某篇文章中有详细说明(当然,是转帖,(*^__^*) 嘻嘻……)。

 

至于自定义类型,我目前只接触到struct类型的转换。也就是在C#中新定义一个struct,逐个字段的类型和大小都要与C++中定义的struct一致。还是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值