• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 高分求救:COM中的内存读取问题,是高手就进来!!!

高分求救:COM中的内存读取问题,是高手就进来!!!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了高分新托福阅读120,mpacc逻辑高分指南,新东方高分奖合肥,高分新托福听力120,中国高考最高分等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 高分求救:COM中的内存读取问题,是高手就进来!!!
描述:

我建了个COM(用VC),在COM增加了一个方法如下:
STDMETHODIMP CXXX::GetBuf(char *buf)
{
     memcpy(buf,"1234",5);
}
我在应用程序调用此方法的时候,buf中的值不对,调用如下:
......
char buf[32];
memset( buf, 0, sizoef(buf) );
pXXX->GetBuf(buf);
......
检查buf的内容,发现只有一个“1”。
请问如果要达到buf中有“1234”,应该如何修改?
万分感谢!!!!


解决方案1:

最好的办法是在COM接口函数声明中不使用char类
型的字符串, COM接口函数声明中对char类型的字
符串不支持, COM中使用的标准字符串是BSTR类型
的, 你可以这样声明:
STDMETHODIMP CXXX::GetBuf(/*[in, out]*/BSTR *bsBuf)
{
   *bsBuf = L"1234";
   return S_OK;
}

解决方案2:

那你用Variant传递参数试试

解决方案3:

STDMETHODIMP CXXX::GetBuf(char *buf)
{
     char* p = "1234";
     memcpy(buf, p, 5);
}
试试

解决方案4:

不用memcpy换个函数试试
或者直接用赋值看看会不会出问题

解决方案5:

是阿

解决方案6:

没关系,不用这么郑重的道歉
TO  wzhing(从不留言) :
很多人存在这样的误区,认为接口声明字符串只能用BSTR,
BSTR是标准自动化类型,如果接口要被VB,脚本调用才必须用BSTR
而且你给的例子…………!!??好像是反面教材!!

解决方案7:

to  luohualiushui(落花流水)
     对不起,看来我学艺不精.回去查了MSDN和几本书后,的确可以对char,byte等施行string属性,都可以表示字符串,抱歉.

解决方案8:

to lop5712(LOP):
   那行代码我是从msdn拷来的,没有问题

解决方案9:

IDL里定义的不对,要像下面这样定义proxy/stub才会知道你的char *pBuf是一个数组,并且你需要传递正确的长度告诉proxy要传递多大的数组,否则proxy只把char *pBuf当作一个cahr的引用类型来传递参数。不过如果你的接口没有通过proxy调用,那么你那样写是可以得到正确结果的,不过这不符合COM规范。
    HRESULT GetBuf(
        [out, size_is(size), length_is(*pRead)]
        char *pBuf,
        [in] ULONG size,
        [out] ULONG *pRead);

解决方案10:


LPTSTR *lpszBuf
请用双指针,

解决方案11:

分配空间
CoTaskMemAlloc

解决方案12:

楼主的错误是因为使用了代理/占位程序,楼主应该是由MIDL生成的,因此应该修改IDL文件
不过楼上有错误,应该是WCHAR  即
HRESULT Procl([in, string] WCHAR *pszName );

解决方案13:

ft
sample:
HRESULT Proc1([in, string] char * pszName);

解决方案14:

这样试试
memcpy(buf,"1234",sizeof(char)*5);

解决方案15:

GetBuf(char **buf)
{
    memcpy(*buf, "1234", 5);
}

解决方案16:

在你的idl文件的接口函数声明中,在参数属性中加入string
编译器以为你要传的只是指向一个char的指针,就没有对后面的字符串列散集
所以只有第一个字符被传递

解决方案17:

找不出错误


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 高分求救NET的程序降级转换到C++60出现的问题
  • 一个郁闷好久的问题高分求解在线等
  • 关于COM下的奇怪问题,高分求救!!
  • 如何查找已注册的dll列表?高分,在线等!
  • 简单问题,求救,200高分相送!
  • 高分相送,不够可以再加~!如何VC朗读中英文交互
  • 高分求助,如何在vc中实现对word表格中的选中格子进行合并?
  • 高分:用VC开发Word插件,连接数据库失败后Word自动关闭
  • 高分求助,word文件的数据库存取问题
  • [高分求解简单问题]EXCEL为什么有些数据能读出来,有些读不出来。

相关文章

  • 2017-06-04 高手们快来,ActiveX控件的难题
  • 2017-06-04 关于在IE中响应ActiveX事件的问题。100分
  • 2017-06-05 大文件上传,断点续传?
  • 2017-06-05 怎么获得设备改变的消息高手请进)
  • 2017-06-04 问个简单的问题:我想在ATL接口中传递字符串
  • 2017-06-04 如何调用EXCEL直接打印在线等!!!一经解决立即结贴!
  • 2017-06-04 ATL做的windowless控件的重绘问题
  • 2017-06-04 开发com需要解决的一个问题,怎么在服务器程序中实现一个共享数据,并且在接口中实现调用
  • 2017-06-04 如何在ActiveX内获取其在HTML中对应的节点对象IHTMLElement2
  • 2017-06-05 各位高手,进来吧,如何终止任一指定进程?还可以加分。

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何能在IE的链接上用右键启动我的程序,并取得所点击的链接?
    • 关于控件中右键菜单的问题
    • 在VC中如何调试多线程的程序?
    • 调用COM初级问题
    • DSOFramer控件全屏实现
    • 为什么我的ocx控件在IE中不能自动下载更新??
    • 请问:管道可以实现局域网内不同机器中进程之间的通讯吗?
    • 自己正用VC开发一个基于WEBBROWSER控件的对话框程序,因为NEWWINDOW2无法使用,想知道如何用BHO配合
    • 在对IStorage读文件的过程中,为什么要调用CoTaskMemFree去释放每一个节点呢?
    • 急,急,急!!!怎么从DLL文件得到相应的LIB文件?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有