(转)C#调用C函数(DLL)传递参数问题

摘要:
注意:1.C函数参数是字符串char*。如果它是一个输入参数,它对应于C#中的字符串或StringBuilder;如果它是C#中对应于输出参数的StringBuilder;2.C函数参数是一个结构指针,需要在C#中定义。如果它是一个输入参数,它可以是myfunction或C#中的myfunctions;如果它是一个输出参数,那么它就是C#中的myfunction。当多个函数使用MyStruct参数时,如果一个函数使用ref,则其他函数也应使用ref(无论它是否为输出参数)。否则,将在运行时提示内存错误。

备忘:

1.C函数参数为字符串char*。如果是入参,对应C#中string或StringBuilder;如果是出参对应C#中StringBuider;

2.C函数参数为结构体指针,需在C#中对应定义结构体。如果是入参,C#中可为myfunction(MyStruct mystruct)或myfunction(ref MyStruct mystruct);如果是出参,C#中为myfunction(ref MyStruct mystruct)。有多个函数使用MyStruct参数时,如果有一个函数使用ref,则其它函数也要使用ref,无论其是否是出参,否则会在运行时提示出现内存错误。即要尽量保证同一结构体类型的参数在C#中定义的一致性。

3.C函数不能返回数组,但可将数组封装为结构体的成员,通过返回结构体结果,从而得到要返回的数组。

其它参考文章:

平台调用P-INVOKE(一)--(基础篇)

http://blog.csdn.net/sdl2005lyx/article/details/6796037

平台调用P-INVOKE(二)--(封送字符串)

http://blog.csdn.net/sdl2005lyx/article/details/6799495

平台调用P-INVOKE(三)--(封送结构体)

http://blog.csdn.net/sdl2005lyx/article/details/6801113

平台调用P-INVOKE高级篇(一)--(封送含有二维数组的结构体)

http://blog.csdn.net/sdl2005lyx/article/details/6998969

免责声明:文章转载自《(转)C#调用C函数(DLL)传递参数问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python:动态参数*argsC语言之生产者与消费者模型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

μC/OS-III---I笔记13---中断管理

中断管理先看一下最常用的临界段进入的函数:进入临界段 OS_CRITICAL_ENTER() 退出临界段OS_CRITICAL_EXIT()他们两个的宏是这样的. 在使能中断延迟提交时: #if OS_CFG_ISR_POST_DEFERRED_EN > 0u /* Deferred ISR P...

Oracle数据库的函数,存储过程,程序包,游标,触发器

Oracle自定义函数 函数的主要特性是它必须返回一个值。创建函数时通过 RETURN 子句指定函数返回值的数据类型。函数的一些限制:● 函数只能带有 IN 参数,不能带有 IN OUT 或 OUT 参数。● 形式参数必须只使用数据库类型,不能使用 PL/SQL 类型。● 函数的返回类型必须是数据库类型 Create function 函数名称 retur...

Win32编程

    Win32编程 此资料为ITjob软件开发教程网提供,特此分享,互相学习! C/C++/VC/MFC技术交流群:95453496 一、Win32编程基本概念 1、消息驱动 在介绍Windows消息驱动概念之前,我们首先来回顾面向过程的程序结构:main()程序有明显的开始、中间过程和结束点,程序是围绕这个过程编写好相关的子过程,再把这些子过程串联...

C#语言重要常识

同一个命名空间可以分散在多个文件中。位于任何命名空间之外的语法元素都被认为是放在匿名全局命名空间中的。在同一个项目中的语法元素可以声明在多个文件中,它可以是类、结构或接口。当然它们必须在同一个命名空间中。#define:定义用于条件编译的符号,为#if、#elif、#else及#endif所用。#error:将引发一个自定义的编译错误,通常用于防止编译期间...

Android之 MTP框架和流程分析

概要 本文的目的是介绍Android系统中MTP的一些相关知识。主要的内容包括:第1部分 MTP简介对Mtp协议进行简单的介绍。第2部分 MTP框架介绍Android系统下MTP的框架。第3部分 MTP启动流程详细分析MTP服务的启动流程,包括Java层, JNI层, kernel相关知识的介绍。第4部分 MTP协议之I->R流程以"PC中打开一个M...

[置顶] 游戏开发技术总结(经典之作)第八集 脚踏实地游戏角色自动寻路、路径搜索算法

8-1 任务让游戏的角色能够自动寻路; 并让所有的动物都动起来。另外我们在这一章将介绍图形光标技术。 8-2 设置障碍 8-2-1 场景中的障碍点 游戏中加入了山石、树木场景后,就应该有对游戏角色行走路线的限制。这种限制是我们通过在游戏场景中设置障碍点来实现的。不管是人还是动物,遇到障碍点,都必须绕道而行。 图8-1在我们不希望角色经过或占据的地方做上...