c++中函数调用,c++如何调用函数

主要方式C#主要通过两种方式提供对非托管代码的调用,第一种是使用平台调用(Platform Invoke,P/Invoke),第二种是使用不安全代码(unsafe),日常开发中我们使用最多的就是第一种,所以下面我们来介绍下如何使用平台调用。

主要方式

C#主要通过两种方式提供对非托管代码的调用,第一种是使用平台调用(P/Invoke),第二种是使用不安全代码(Unsafe),第一种是日常开发中使用频率最高的,下面我们来介绍一下如何使用平台调用。

平台调用

CLI通过P/Invoke提供此功能,允许API调用非托管dll所导出的函数.平台调用主要包括以下步骤:声明外部函数、映射数据类型、错误处理。

00-1010像类的所有普通方法一样,我们需要在类的上下文中声明目标API,同时给它添加一个extern修饰符,从而将其声明为外部函数。它几乎总是静态的(static).正如下面的代码所示,我们声明了外部函数SendMessage(位于user32.dll中),可以省略或写入EntryPoint属性,或者指定一个函数名来覆盖默认行为,CharSet属性用于指定是调用Unicode还是ASCII版本的API,还是自动尝试通过。NET平台。

使用系统;使用系统。运行时. InteropServices命名空间PayPlatformProxy { public class LevyTest {[DllImport(' user 32 . dll '),EntryPoint=' SendMessage ',CharSet=CharSet。Auto)])私有静态extern IntPtr send message(IntPtr HWnd,int Msg,IntPtr wParam,IntPtr lParam);}}

1. 声明外部函数

托管代码的基本类型不会随着处理器而改变。无论是32位还是64位处理器,int类型始终是32位,但是在非托管代码中,内存指针会随着处理器而变化。因此,c语言中的HANDLE和LPVOID等类型不能对应int,而应该对应IntPtr,int ptr的大小随处理器内存的布局而变化。微软官网文档类型封送处理有一个涉及类型的映射,大家可以参考研究一下。此外,pinvoke.net还有很多C#中系统API的声明例子。输入关键字以查看示例是如何映射的,从而完成从非托管类型到托管类型的映射。此外,C#中C方法的对应签名也可以由pinvoke-interop-assistant生成,我们将在示例的演示部分使用。

2. 数据类型映射

如下,我们定义了c的方法LevyAgeAdd,其目的是输入姓名和年龄,然后返回newAge和提示年龄增加的信息(resultMsg)。

extern ' C ' { _ declspec(dllexport)void levyagead(const char * name,int age,int* newAge,char * resultMsg);}接下来,我们在pinvoke-interop-assistant工具中输入C方法的声明,然后点击Generate生成对应C#方法的签名,如下图所示。

如何在C#中调用C++方法

然后我们通过C#代码调用这个C代码,先复制外部函数LevyAgeAdd的声明,然后调用方法传入每个参数值,如下所示:

[DllImport('Project1.dll ',EntryPoint=' LevyAgeAdd ',CharSet=CharSet。auto)]公共静态外部void levyageAdd([In()][Marshalas(unmanaged TYPe。LPStr)])字符串名称、int age、ref int newAge、int ptr resultMsg);void Main(){ int new age=0;IntPtr p=元帅。alloch global(255);//调用c方法LevyAgeAdd('杨晓斗',25,ref newAge,p);字符串结果消息=封送。PtrToStringAnsi(p);$ Newage的值为: {newAge}。dump();“$ resultMsg”的值是: {resultMsg}”。dump();}输出结果如下图:所示。

如何在C#中调用C++方法

哈哈,调用结果正确!真香!事实上,我们的C代码的实现确实将年龄增加了3岁,然后输出提示信息。希望这篇文章能对童鞋有所帮助!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44871.html

(0)

相关推荐

  • 让孩子自己玩还是陪着玩,可以陪孩子玩的游戏

    我的大儿子最近用纸板箱做了一台自动售货机。我女儿用纸和胶带给她的芭比娃娃做衣服。我最小的孩子走过大厅的衣柜,用她仅有八分之一的英语词汇描述了一双鞋。三个孩子都在玩Gearton,这...

    生活 2021年11月18日
  • 獐子岛扇贝事件,獐子岛扇贝案例分析存货造假

    獐子岛坐拥得天独厚的地理环境,炙手可热的董事长手握一把好牌,准备冲击更高的目标。然而从他们丢出的第一张牌,就可以明显地看出,玩砸了。

    生活 2021年11月14日
  • Python入门教程06——数字运算(长文干货)

    数字运算符Python中常用的数字运算操作符如表3-1所示。

    科技 2021年11月27日
  • 在秋天,孕妇可以吃三种水果来增强免疫力,帮助胎儿发育。

    一叶知秋,随着渐凉的风和不再茂密的树预先报告,秋天就悄无声息地来了。一进入秋天,天气开始变得干燥起来,人们的体感也开始变得不太舒适,尤其对于孕妇来说,秋天是一个又干又凉的季节,非常容易感冒生病,身体里的养分消耗也会加大,肚子里的胎儿也就自然而然的受到影响。许多人选择在秋天补充各种营养,殊不知有一些水果富含丰富的养分,对于产妇和胎儿来说是非常有利的。

    生活 2021年10月22日
  • 国家互联网信息办公室就《网络数据安全管理条例(征求意见稿)》公开征求意见

    “网信中国”微信公众号11月14日消息,为落实《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律关于数据安全管理的规定,规范网络数据处理活动,保护个人、组织在网络空间的合法权益,维护国家安全和公共利益,根据国务院2021年立法计划,我办会同相关部门研究起草《网络数据安全管理条例(征求意见稿)》,现向社会公开征求意见。公众可通过以下途径和方式反馈意见:

    科技 2021年11月14日
  • 生活成本最贵城市,中国生活成本高的城市排行榜

    6月9日,美世第26届年度生活成本调查结果公布。这项调查的初衷在于帮助雇主了解海外派遣员工成本的基本情况。今年的调查涵盖了全球400个城市,并在每个城市计算了超过200项比较成本,包括住房、交通、食品、服装、家居用品和娱乐活动。这项调查以纽约市作为基准城市,汇率变化则是相对于美元来计算。最终调查发现,币值波动、商品和服务成本上涨以及住宿价格不稳定等特定因素对于确定国际公司的外派人员的成本至关重要。以下是这次调查中全球生活成本最高的10座城市。

    生活 2021年12月2日