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

c#编程指南(十) 平台调用P-INVOKE完全掌握, 字符串和指针

 2010-09-30 22:46:12 来源:WEB开发网   
核心提示: 下面看C#如何调用,第一:字符串指针作为输入参数,c#编程指南(十) 平台调用P-INVOKE完全掌握, 字符串和指针(2),可以使用byte[] 和MarshalAs来解决,(注意四个P-INVOKE,同样也包含两个版本,注意:Marshal.PtrToStringAnsi()函数的使用,两个

下面看C#如何调用。

第一:字符串指针作为输入参数,可以使用byte[] 和MarshalAs来解决。(注意四个P-INVOKE,两个ANSI版本,和两个UNICODE版本),推荐使用MarshalAs方法简单明了。

 1     [DllImport("TestDll", EntryPoint = "PrintString")]
 2     public static extern void PrintStringByBytes(byte[] hello);
 3 
 4     [DllImport("TestDll", EntryPoint = "PrintString")]
 5     public static extern void PrintStringByMarshal([MarshalAs(UnmanagedType.LPStr)]string hello);
 6 
 7     [DllImport("TestDll", EntryPoint = "PrintStringW")]
 8     public static extern void PrintStringByBytesW(byte[] hello);
 9 
10     [DllImport("TestDll", EntryPoint = "PrintStringW")]
11     public static extern void PrintStringByMarshalW([MarshalAs(UnmanagedType.LPWStr)]string hello);
12 
13 
14     public void Run()
15     {
16       PrintStringByBytes(Encoding.ASCII.GetBytes("use byte[]"));
17       PrintStringByMarshal("use MarshalAs");
18       PrintStringByBytesW(Encoding.Unicode.GetBytes("use byte[]"));
19       PrintStringByMarshalW("use MarshalAs");
20       }

第二:字符串指针作为返回值,和上面一样也有两种声明方法,同样也包含两个版本。注意:Marshal.PtrToStringAnsi()函数的使用,把字符串指针转变为C#的string.推荐使用MarshalAs方法简单明了。

上一页  1 2 3 4  下一页

Tags:编程 指南 平台

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