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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C#调用C++DLL的总结11——传入结构体时注意引用(ref)  

2015-12-31 16:34:25|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C#调用C++DLL的总结11——传入结构体时注意引用(ref

 在新的库封装的过程中,需要向C++库里传入一个可写的缓冲区,可是在实际使用中,却报内存已经破坏不可写。看下面的伪代码:

C++

void _stdcall  Get(DataStruct ds,char*buf);

C#:

struct DataStruct

{//上面的Struct改成Class

......

}

void Get(ref DataStruct ds,ref byte[]buf)

C#中调用上面的Get这个函数就会出现写错误(没有红色的Ref),一开始高度怀疑是Buf的问题,先是用的New,然后又用AllocHGlobal,还是不成,这时最最失误的就是没有下断点去调试,如果下断点去调试就可以直接判断是第一个参数的错误。一定要引起注意啊。

后来把上面的Struct改成了ClassOK了。

当时忽然想起当初最早同事也出现过这咱问题,但没有想这些,只是允许其简单的把Struct改成了Class就好了。今天决定看一看,结果认真一看发现了问题。

没有调用时候的Ref,也就是红色的Ref部分。加上后就好了。这时候又想起在网上查资料时有人提过,结构体传参一定要加Ref,因为它是一个值类型。可能导致一些内存的不可控。诚不欺我啊。

从这点来看,同学们的基础还是差,要努力。

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

历史上的今天

评论

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

页脚

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