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

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

 2010-09-30 22:46:10 来源:WEB开发网   
核心提示:这篇是讲述P-INVOKE中,应对各种指针的方法,c#编程指南(十一) 平台调用P-INVOKE完全掌握, 指针大全,包括普通指针,字符串指针,可以使用marshalAs返回值,当然也可以用Marshal.PtrToStringAuto()来读取字符串,二级指针,指针数组

这篇是讲述P-INVOKE中,应对各种指针的方法。包括普通指针,字符串指针,二级指针,指针数组,函数指针,结构体指针。篇幅估计有点长,大家耐心点看。嘿嘿~~

第一:普通指针,包括char *,short *,int *,__int64 *,这些指针进行平台调用是都对应C#的IntPtr类型,然后使用Marshal.ReadXXX()系列函数读取就可,写内存时使用Marshal.WriteXXX()系列函数就行。

c++:

28  static int test5 = 100;
29  int * __stdcall ReadInt()
30 {
31   return &test5;
32 }

c#:注意Marshal.ReadXXX()系列函数的使用

15     [DllImport("TestDll")]
16     public static extern IntPtr ReadInt();
29     //##############################
42       IntPtr p5 = ReadInt();
43       Console.WriteLine(Marshal.ReadInt32(p5));
44       IntPtr p6 = ReadUint();
45       Console.WriteLine(Convert.ToUInt32(Marshal.ReadInt32(p6)));

第二:字符串指针上一篇已经有过讨论,可以使用marshalAs返回值,当然也可以用Marshal.PtrToStringAuto()来读取字符串。个人推荐第一个。

c++:

 1 static char * test9 = "you are very very bad bad girl, gaga!";
 2  char * __stdcall ReadString()
 3 {
 4   return test9;
 5 }
 6 
 7 
 8  static wchar_t * test10 = TEXT("you are very very bad bad girl, gaga!");
 9 wchar_t * __stdcall ReadStringW()
10 {
11   return test10;
12 }

1 2 3  下一页

Tags:编程 指南 十一

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