封送带字符串指针的结构体参数到非托管函数
2013-05-08 23:02
225 查看
在NET项目开发过程中,经常会遇到向非托管代码封送结构体的情况,如果结构体中仅包含blittable类型/字符串/字符数组类型字段,仅需要在C#中重新声明该结构体并将该结构体作为参数传递到非托管函数即可。但若结构体中包含了指向字符串的指针,情况会稍微复杂些。
非托管结构体代码如下:
?
?
C#中以string代表wchar_t*,如非托管函数参数直接为wchar_t**,可以用ref string或out string表示指向字符串的指针。但上述示例wchar_t**存在于结构体中,对于这类指针在C#中采用IntPtr。
?
下面需要获取字符串数组的首地址,C#中有两种方式可以获取数组的首地址:GCHandle的AddrOfPinnedObject和Marshal.UnsafeAddrOfPinnedArrayElement方法。但GCHandle无法Pinned引用类型数组,MSDN中又指明Marshal.UnsafeAddrOfPinnedArrayElement方法调用前需Pinned指定的数组。看来必须设法将字符串数组转换为值类型数组,完整代码如下:
?
?
运行结果:
转载请注明出处:
http://www.cnblogs.com/desmondwang/archive/2011/12/18/MarshalStructWithStrPtr.html
非托管结构体代码如下:
?
?
?
转载请注明出处:
http://www.cnblogs.com/desmondwang/archive/2011/12/18/MarshalStructWithStrPtr.html
相关文章推荐
- 封送带字符串指针的结构体参数到非托管函数
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- 字符串指针作为函数的参数.实现strcpy()函数
- C#处理VC++动态库回调函数的字符串指针参数(传递二进制流)
- 结构体指针与结构体名做函数参数对比
- C指针、数组、字符串、结构体之间的联系
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体指针与字符串转换
- C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】
- 正确使用指针(指针作为输出型参数)与结构体指针作为函数参数
- 结构体变量指针作为函数参数
- 二十六、数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数
- 结构体指针作函数的参数
- 用结构体指针作为函数参数
- 07指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏
- MFC 关于SendMessage 消息参数 传送字符串,结构体
- 第十六周项目2——用指针玩字符串(字符串的链接—数组名做参数)
- java调用c dll,指针参数和结构体参数搞定
- C/C++学习之C提高----函数调用模型、指针做函数参数、字符串的基本操作、一级指针内存模型建立
- 《IOS_C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)