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

c#编程指南(十四) 平台调用P-INVOKE完全掌握, 反汇编细解结构体作为返回值

 2010-09-30 22:46:03 来源:WEB开发网   
核心提示: 总结一下,这个结构体作为返回值,c#编程指南(十四) 平台调用P-INVOKE完全掌握, 反汇编细解结构体作为返回值(2),主要依赖于编译器对于超过8字节的返回值的编译处理,第一:不建议使用结构体作为返回值,正常的P-INVOKE,不用修改,因为这太依赖编译器了,第二:如果没法改变

总结一下,这个结构体作为返回值,主要依赖于编译器对于超过8字节的返回值的编译处理。

第一:不建议使用结构体作为返回值,因为这太依赖编译器了。

第二:如果没法改变,就用如下的方法判断:            

//if (Marshal.SizeOf(typeof(X)) > 8)            
//{            
//    返回值作为输出参数。            
//}            
//else           
 //{             
//    返回值正常返回。           
 //}

第三:<=8字节,正常的P-INVOKE,不用修改。

第四:>8字节,把返回值作为从左向右的第一个输入输出参数:下面是简单的示例

Test GetTest();   ====> IntPtr GetTest(IntPtr lptest);
Test GetTest(int i) ======> IntPtr GetTest(IntPtr lptest, int i); 

最后:C#调用Test3 _stdcall GetTest3()为什么:        

[DllImport("TestDll")]        
public static extern IntPtr GetTest3(IntPtr lptest);

[DllImport("TestDll",EntryPoint="GetTest3")]        
public static extern void Test3Extra(IntPtr p);

返回值不同却都可以调用?嘿嘿!!

上一页  1 2 

Tags:编程 指南 十四

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