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

转载 2016年05月31日 20:51:59

备忘:

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函数, 以及各种类型的参数传递

1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int __declspec(dllexport) te...
  • vito13
  • vito13
  • 2017年03月31日 15:30
  • 486

C# 调用dll 回调函数

C/C++内回调函数一般通过传递函数指针来实现,函数指针在C#中对应的就是委托.   Cpp代码   // 传入函数指针  typedef void (*FUNC)(int,...
  • snakorse
  • snakorse
  • 2014年03月08日 01:51
  • 1824

C#与C++交互之——参数传递

《精通.NET互操作》读书笔记,该书详细讲述了.Net与C/C++的交互技术 托管代码和非托管代码的交互技术有3种:平台调用(PInvoke)、C++ Interop、COM Interop ...
  • Kelvin_Yan
  • Kelvin_Yan
  • 2014年12月04日 09:39
  • 4473

C#调用C(C++)dll示例教程,包含dll找不到函数入口的解决办法,包含C#dll调用方式不对出错的解决办法

本篇文章为了熟悉在C#环境下如何调用C(C++)写的dl
  • cumtwys
  • cumtwys
  • 2014年07月30日 23:43
  • 2177

C#调用C++封装的DLL传递结构体数组的终极解决方案

在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,就会发现C#上没有类型...
  • ksp416
  • ksp416
  • 2015年09月23日 09:10
  • 284

C#调用C++的Dll(参数和返回值為char* TCHAR*)

想要在C#和C++之间进行字符串传递会涉及到两件事情: 1.C#的string和C++的字符串首指针要怎么对应.   2.字符串分为ANSI和UNICODE. C++ 头文件接口: //Fil...
  • donnie88888888
  • donnie88888888
  • 2016年12月02日 16:20
  • 2742

C#调用DLL的几种方法,包括C#调用C\C++\C#DLL

C#中dll调用方法 一、      DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要...
  • AAA123524457
  • AAA123524457
  • 2016年11月20日 17:46
  • 8672

C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)

一:首先什么是IntPtr 先来看看MSDN上说的:用于表示指针或句柄的平台特定类型。这个其实说出了这样两个事实,IntPtr 可以用来表示指针或句柄、它是一个平台特定类型。对于它的解释,这个哥...
  • u010159842
  • u010159842
  • 2016年06月27日 10:49
  • 2501

在VB中调用C/C++语言编写的dll,数组参数的传递

动态链接库(dll)的好处就不多说了,这里就把如何在VB中调用VC写的dll函数的方法介绍一下,供有需要的朋友们参考,同时也免得自己以后忘了。 初次接触DLL的用户经常会遇到一个问题:在VC环境...
  • shejiannan
  • shejiannan
  • 2014年05月19日 16:20
  • 1203

C语言有参函数调用时参数间数据传递问题

C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值,在函数调用时给形参分配相应的内存单元,同...
  • shan1991fei
  • shan1991fei
  • 2016年05月02日 13:43
  • 5062
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#调用C函数(DLL)传递参数问题
举报原因:
原因补充:

(最多只允许输入30个字)