C#调用C++ 平台调用P/Invoke 结构体--结构体嵌套【八】
2014-09-20 10:06
363 查看
普通的结构体嵌套很简单,C#中直接定义成对应的结构体即可,这里介绍的是嵌套的结构体以指针的方式表达
【1】嵌套结构体指针
C++代码:
C#代码:定义为IntPtr需要进行解析:
测试:
【1】嵌套结构体指针
C++代码:
typedef struct _testStru10Pre { int iVal; }testStru10Pre; typedef struct _testStru10 { testStru10Pre *pPre; long lVal; _testStru10() { pPre = NULL; } }testStru10;
EXPORTDLL_API void Struct_NestStruct( testStru10 *pStru ) { if (NULL == pStru) { return; } pStru->lVal = 10; if (NULL != pStru->pPre) { pStru->pPre->iVal = 9; } wprintf(L"Struct_NestStruct \n"); }
C#代码:定义为IntPtr需要进行解析:
public struct testStru10Pre { public int iVal; }; public struct testStru10 { public IntPtr pPre; public int lVal; }; [DllImport("ExportDll.dll", CharSet = CharSet.Unicode)] public static extern void Struct_NestStruct(ref testStru10 pStru);
测试:
CExportDll.testStru10Pre str10Pre = new CExportDll.testStru10Pre(); IntPtr intPtrStru10Pre = Marshal.AllocCoTaskMem(Marshal.SizeOf(str10Pre)); Marshal.StructureToPtr(str10Pre, intPtrStru10Pre, false); CExportDll.testStru10 stru10 = new CExportDll.testStru10(); stru10.pPre = intPtrStru10Pre; CExportDll.Struct_NestStruct(ref stru10); CExportDll.testStru10Pre str10Pre2 = (CExportDll.testStru10Pre)Marshal.PtrToStructure(stru10.pPre, typeof(CExportDll.testStru10Pre)); Marshal.DestroyStructure(intPtrStru10Pre, typeof(CExportDll.testStru10Pre));
相关文章推荐
- C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】
- C#调用C++ 平台调用P/Invoke 结构体--内存对齐方式、union封装【七】
- C#调用C++ 平台调用P/Invoke 结构体--输入输出参数、返回值、返出值、结构体数组作为参数【五】
- C#调用C++ 平台调用P/Invoke 字符串【三】
- C#调用C++ 平台调用P/Invoke 调用约定【一】
- C#调用C++ 平台调用P/Invoke 错误码LastError【四】
- 平台调用 4000 P-INVOKE完全掌握,C#和C++互相调用
- c#编程指南(九) 平台调用P-INVOKE完全掌握,C#和C++互相调用
- C#调用C++ 平台调用P/Invoke 函数指针/回调函数【二】
- c#编程指南——平台调用P-INVOKE完全掌握,C#和C++互相调用
- C# 中调用C++ DLL (P/Invoke) - C++ - 海洋博客C++,net,tag,
- 国内首本全面深入介绍.NET互操作技术(P/Invoke『或PInvoke,平台调用』,C++ Interop『C++/CLI』,COM Interop)的参考书籍
- C#通过p/invoke调用C++ DLL (转)
- 平台调用P-INVOKE(三)--(封送结构体)
- c#编程指南(十四) 平台调用P-INVOKE完全掌握, 反汇编细解结构体作为返回值
- C# 调用C++dll中的结构体的定义
- C#通过p/invoke调用C++ DLL
- c#编程指南(十二) 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局
- 平台调用P-INVOKE完全掌握, 结构体和结构体指针
- C# 中调用C++ DLL (P/Invoke)