WEB开发网
开发学院软件开发C语言 c#编程指南(十一) 平台调用P-INVOKE完全掌握, 指针... 阅读

c#编程指南(十一) 平台调用P-INVOKE完全掌握, 指针大全

 2010-09-30 22:46:10 来源:WEB开发网   
核心提示: c#:注意Marshal.PtrToStringAuto()函数的使用,1[DllImport("TestDll")]2[return:MarshalAs(UnmanagedType.LPStr)]3publicstaticexternstringReadString();4

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 }

Tags:编程 指南 十一

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接