iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c#调用c语言dll需要注意的事项有哪些
  • 154
分享到

c#调用c语言dll需要注意的事项有哪些

2023-06-14 07:06:32 154人浏览 泡泡鱼
摘要

小编给大家分享一下C#调用C语言dll需要注意的事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、将C#工程和C的dll工程放在同一个解决方案下,这样就

小编给大家分享一下C#调用C语言dll需要注意的事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、将C#工程和C的dll工程放在同一个解决方案下,这样就可以实现联动调试,直接从C#中进入C的dll函数里。注意:每次更改dll中的代码后都必须重新生成dll。另,C#与C中有几种变量类型不对应,注意声明时的区分。

语言C#C
类型longlong long/__int64
byte/Byteunsigned char
char

wchar_t

UInt32size_t

二、dll工程中头文件加入以下代码:

// 此代码为了方便头文件在dll工程和调用该dll的工程中重复利用// 为了方便其他使用者,建议dll开发者定义TESTDLL宏#ifdef  TESTDLL#define DLLapi _declspec(dllexport)#else#define DLLAPI _declspec(dllimport)#endif // 此代码为了保证使用C编译器编译代码,防止函数名出现其他后缀 #ifdef __cpluscplusextern "C" {#endif // 插入所需导出的代码,例如:int DLLAPI testdll(); #ifdef __cpluscplus}#endif

三、dll工程中源文件加入以下代码(注意:该代码应该出现于上述头文件之前):

#define TESTDLL

四、C#工程中,需要调用dll函数的文件中加入以下代码:

// 导入testdll函数[DllImport(@"../../../Debug/testdll.dll", EntryPoint = "testdll", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallinGConvention = CallingConvention.Cdecl)] extern static int testdll();

第一个参数是dll文件所在地址,由于该dll与C#工程在同一个解决方案中因此可以写成上述形式;

EntryPoint, 函数的名称,可以不写,下面一行有声明;

SetLastError, 指示方法是否保留 Win32"上一错误";

CharSet, dll中字符串的表达方式,通常使用Ansi或者Unicode;该设置会将C#中的字符自动转换为设置的方式,例如上述设置会将工程中的字符串转换为Ansi字符;

ExactSpelling,指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配;

PreserveSig,指示方法的签名应当被保留还是被转换;

CallingConvention,调用惯例,通常C语言使用Cdecl方式CallingConvention,如果该值与dll中的调用方式不一致,通常会造成堆栈不平衡,导致PInvoke报错,该选项有如下几个值:

Cdecl调用方清理堆栈。这使您能够调用具有 varargs 的函数(如 Printf),使之可用于接受可变数目的参数的方法。 
FastCall不支持此调用约定。
StdCall被调用方清理堆栈。这是使用平台 invoke 调用非托管函数的默认约定。 
ThisCall 第一个参数是 this 指针,它存储在寄存器 ECX 中。其他参数被推送到堆栈上。此调用约定用于对从非托管 DLL 导出的类调用方法。 
Winapi 此成员实际上不是调用约定,而是使用了默认平台调用约定。例如,在 windows 上默认为 StdCall,在 Windows CE.net 上默认为 Cdecl。 

以上是“c#调用c语言dll需要注意的事项有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网其他教程频道!

--结束END--

本文标题: c#调用c语言dll需要注意的事项有哪些

本文链接: https://www.lsjlt.com/news/268792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c#调用c语言dll需要注意的事项有哪些
    小编给大家分享一下c#调用c语言dll需要注意的事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、将C#工程和C的dll工程放在同一个解决方案下,这样就...
    99+
    2023-06-14
  • c#调用c语言dll需要注意的地方
    目录一、将C#工程和C的dll工程放在同一个解决方案下,这样就可以实现联动调试,直接从C#中进入C的dll函数里。注意:每次更改dll中的代码后都必须重新生成dll。另,C#与C中有...
    99+
    2022-11-11
  • c语言函数的递归调用要注意哪些事项
    在C语言中,递归调用函数时需要注意以下几个事项:1. 递归的终止条件:递归函数需要定义一个终止条件,当满足这个条件时,递归调用将停止...
    99+
    2023-09-22
    c语言
  • 使用c语言常量要注意哪些事项
    使用C语言常量时需要注意以下事项: 常量的值不能被修改。一旦常量被定义后,它的值就不能被修改。 常量的命名应该符合命名规范,...
    99+
    2023-10-23
    c语言
  • C语言中使用break要注意哪些事项
    在C语言中,使用break语句时需要注意以下几点事项:1. break只能用于循环语句和switch语句中,用来跳出当前循环或swi...
    99+
    2023-10-12
    C语言
  • c语言声明变量要注意哪些事项
    在C语言中声明变量时需要注意以下事项:1. 声明变量前要先确定变量的类型,例如整型、浮点型、字符型等。2. 变量名必须以字母或下划线...
    99+
    2023-09-08
    c语言
  • C语言宏定义使用要注意哪些事项
    在使用C语言宏定义时,需要注意以下事项:1. 保持宏定义的简洁和清晰:宏定义应该尽可能简洁明了,避免过长或复杂的宏定义,以提高代码的...
    99+
    2023-10-11
    C语言
  • c语言定义字符串要注意哪些事项
    在C语言中定义字符串时,需要注意以下几个事项:1. 字符串以字符数组的形式表示,必须以空字符 '\0' 结尾。例如:char str...
    99+
    2023-10-12
    c语言
  • c语言指针变量运算要注意哪些事项
    在进行C语言指针变量运算时,需要注意以下事项:1. 指针运算只能应用于指针类型,不能应用于其他类型的变量。2. 指针变量的运算只能进...
    99+
    2023-10-20
    C语言
  • C#中文件安全管理需要注意的事项有哪些
    这篇文章给大家分享的是有关C#中文件安全管理需要注意的事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.DotNet文件目录常用操作:     &nbs...
    99+
    2023-06-14
  • C语言全局变量定义的注意事项有哪些
    在C语言中,全局变量的定义需要注意以下几个事项:1. 全局变量的定义应该在所有函数的外部,即在函数体外部进行定义。2. 全局变量的定...
    99+
    2023-09-29
    C语言
  • React中需要注意的事项有哪些
    小编给大家分享一下React中需要注意的事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、容器性组件(containe...
    99+
    2022-10-19
  • Linux操作系统下C语言编程注意事项有哪些
    Linux操作系统下C语言编程注意事项有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、工具的使用本文引用地址:http://www.eepw.com.cn/articl...
    99+
    2023-06-16
  • C#中HttpClient使用注意事项有哪些
    小编给大家分享一下C#中HttpClient使用注意事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近在测试一个第三方API,准备集成在我们的网站应用中...
    99+
    2023-06-29
  • 服务器租需要注意的事项有哪些
    服务器租需要注意的事项有:1、注意服务器的默认开放端口是否为3389以及系统是否自带防火墙;2、注意服务器的维护;3、注意不要擅自关闭以及禁用相关的远程服务器;4、注意不要轻易对服务器的网卡进行相关操作;5、注意服务器的相关防火墙是否允许通...
    99+
    2022-10-17
  • 规划网站需要注意的事项有哪些
    这篇文章主要讲解了“规划网站需要注意的事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“规划网站需要注意的事项有哪些”吧!互联网时代,网站是企业进行全网营销的必备品。可对于网站建设,企...
    99+
    2023-06-10
  • C++多线程调试和测试的注意事项有哪些
    这篇文章主要讲解了“C++多线程调试和测试的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++多线程调试和测试的注意事项有哪些”吧!一、关于设置断点和单步执行 很多同学非常依...
    99+
    2023-06-17
  • 租用美国服务器需要注意的事项有哪些
    租用美国服务器需要注意的事项有:1、租用美国服务器的硬件质量如何;2、租用美国服务器的带宽大小如何;3、租用美国服务器是否存在网络延时的现象,网络环境好不好;4、租用美国服务器的售后服务质量如何,是否能够第一时间帮助用户解决服务器故障问题。...
    99+
    2022-10-19
  • 高防服务器租用需要注意的事项有哪些
    高防服务器租用需要注意的事项:1.在DDoS防护领域的经营时长。2.是否具备智能的系统或程序来监控流向您站点的流量,分析数据包和观察IP。3.是否提供SLA协议来保证防御效果。4.是否能够确保人类访问者不被阻止。5.是否提供详细的攻击报告。...
    99+
    2022-10-13
  • 海外服务器租用需要注意的事项有哪些
    海外服务器租用需要注意的事项有:1、需要注意海外服务器的稳定性怎么样,是否能够长时间正常运作;2、需要选择合适的服务器配置资源,从而满足自身业务需求;3、需要选择合适的带宽资源,避免出现网络不稳定、访问速度慢的情况发生。具体内容如下:1、稳...
    99+
    2022-10-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作