注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C#调用C++DLL的总结3——DLL与c#互传指针补  

2013-11-15 15:15:28|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C#调用C++DLL的总结3补——DLL与c#互传指针

在总结3中,对传送指针数组的分配提供了一种解决方法,今天再说两种:

一、直接分配内存指针:用于对结构体内的指针和传送数组

举一个比较简单的例子:

            testCon conn = new testCon();

            try

            {

                curOper.name += "\0";

                byte[] name = System.Text.Encoding.Default.GetBytes(curOper.name);

                int size = Marshal.SizeOf(typeof(Char));

                conn.name = Marshal.AllocHGlobal(size * name.Length);

 

                ///服务器IP

                Marshal.Copy(name, 0, conn.name, size * (name.Length));

 

                conn.constring = “my con”;

                conn.link = 16;

        

            }

            finally

            {

                //释放内存空间

                Marshal.FreeHGlobal(conn.name);

            }

 

二、用数组的方法传递结构体数组指针

这个原来是想分配内存的,但是后来发现直接传送数组是一样的,这个前面的总结3中整形的数组就是这样传递的,其实,结构体也是可以的:

        [DllImport("AttendServerAPI-vc100.dll", EntryPoint = "identifyRecAdd", CharSet = CharSet.None)]

        public static extern int identifyRecAddArray(

                                         [MarshalAs(UnmanagedType.LPStr)]

                                          string srvIP,

                                          UInt16 srvPort,

                                          IdentifyData[] data,

                                          int len);

 

数据是可以正常传入到C++DLL中去的。

化繁为简,任之大者。

  评论这张
 
阅读(495)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017