c#编程指南(十一) 平台调用P-INVOKE完全掌握, 指针大全
2010-09-30 22:46:10 来源:WEB开发网c#:注意Marshal.PtrToStringAuto()函数的使用。
1 [DllImport("TestDll")]
2 [return: MarshalAs(UnmanagedType.LPStr)]
3 public static extern string ReadString();
4
5 [DllImport("TestDll")]
6 public static extern IntPtr ReadStringW();
7 //#########################
8 Console.WriteLine(ReadString());
9
10 IntPtr p9 = ReadStringW();
11 Console.WriteLine(Marshal.PtrToStringAuto(p9));
第三:函数指针,C#的委托就对应C++的__stdcall调用协议的函数指针。前面也有讨论。
c++:
1 typedef void (__stdcall * FunctionPoint)(void);
2 void __stdcall TestFunction(){printf("you are very very bad bad girl, gaga!\n");}
3 FunctionPoint __stdcall GetFunctionPointer()
4 {
5 return TestFunction;
6 }
c#:
1 public delegate void FunctionPointer();
2 [DllImport("TestDll")]
3 public static extern FunctionPointer GetFunctionPointer();
4 //#########################
5 FunctionPointer pointer = GetFunctionPointer();
6 pointer();
第四:指针的指针,也就是二级指针,要使用Marshal.ReadIntPtr()来读取。
c++:
1 static int test11 = 555;
2 static int * test12 = &test11;
3 int ** __stdcall ReadPoint2()
4 {
5 return &test12;
6 }
更多精彩
赞助商链接