akirya的空间
akirya 北京 在线状态
16545次访问 打开 上万人气
可用分15732个 打开 万元户
专家分96364分 打开 ☆☆☆☆
43小时前登陆过 活跃专家

注册时间:2002-7-31
[加为好友] [关注他/她]
[即时聊天] [发私信]
akirya的个人资料
所在行业:计算机软件
社区头衔:社区专家
个人专长:
灌水,C,C++,软件开发
专家分: 目前总共有100175分
VC/MFC:31451分 C/C++:30856分 扩充话题:18171分
博客:目前总共有60条评论
访问量:14963
排名:7331
文章数:31条
akirya的好友
akirya的留言
yangshuosky发表于:2008-06-30
Marshal.WriteInt32 是写int32数据类型,请问如果写uint32类型的数据应该怎样写呢?
yangshuosky发表于:2008-06-28
还有SI_Write的调用,我现在改成了byte[] DataSend = { 2, 125 }; IntPtr p = Marshal.AllocHGlobal(2); Marshal.Copy(DataSend, 0, p, 2);IntPtr intptr = Marshal.AllocHGlobal(2);Marshal.WriteInt32(intptr, 2);SI_Write(m_hUSBDevice,p,2, intptr);也按你说的改为cdecl调用了。还是说不匹配,问题出在哪呢?
yangshuosky发表于:2008-06-28
我调试看了一下数组的大小,申请的内存大小没问题的。难道真是编码文件dll有问题?那就惨了。我是从网上下载的,感觉不会有问题的啊。调试不是说0x03429b0a指令引用的0x0ead2000内存不能为write吗,有没有办法查看这个指令的内存看具体是什么问题啊?
回复于 2008-07-01
你最好拿到dll的源码调试一下。
yangshuosky发表于:2008-06-28
非托管内存的申请有大小限制吗?我需要400000字节,是不是超出了?图像压缩前数据量这么大应该没错吧?
回复于 2008-06-28
400000字节应该不大,你得看看说明文档需要多少
yangshuosky发表于:2008-06-28
我用CallingConvention也不行啊。请问您有其他联系方式吗?老是留言问问题不大能问的清楚。我做课题遇到很多问题实在找不到人请教,所以麻烦您了!
yangshuosky发表于:2008-06-28
请问(c#中)调用图像压缩的DLL(c++编写)时,需要设置原始图像缓冲区,是不是必须要申请非托管内存啊?intptr outvideodata = Marshal.AllocHGlobal(videonumber*2);Marshal.Copy(buff , 0, outvideodata, videonumber);En_SetCompressIn(outvideodata);//设置原始图像缓冲区En_StartEncoder();//开始压缩。调试总是出现**内存不能为written或者read.怎么回事呢?
回复于 2008-06-28
是得申请非托管内存,出现问题应该是你申请的大小、或者dll的编写有问题。
lei5179发表于:2008-06-18
请问我下载了进销存管理系统,就是无法安装,能告诉我说什么地方出问题了吗 ?
回复于 2008-06-18
俺天生愚笨猜不出来.
yangshuosky发表于:2008-06-18
调试时出现错误:对 PInvoke 函数“Client!Client.Form1::SI_Write”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
回复于 2008-06-18
那就是CallingConvention 的问题了,修改调用方式为cdecl[DllImport(CallingConvention=CallingConvention.Cdecl)]
yangshuosky发表于:2008-06-14
原型为SI_Write (HANDLE Handle, LPVOID Buffer, DWORD NumBytesToWrite,DWORD *NumBytesWritten)public IntPtr m_hUSBDevice = (IntPtr)INVALID_HANDLE_VALUE;
我写为 SI_Write(IntPtr hPrinter,IntPtr intptr, UInt32 cdBuf, out UInt32 pcWritten);然后
IntPtr intptr = Marshal.AllocHGlobal(2);
            Marshal.Copy(DataSend, 0, intptr, 2);
            DataSend[0] = 2;
            DataSend[1] = 125;
UInt32 bb;
SI_Write(m_hUSBDevice, intptr, 2, out  bb)
还是不匹配。请问是哪还不对呢?
回复于 2008-06-17
怎么不匹配? 出现什么错误?
yangshuosky发表于:2008-06-12
谢谢您回复我的帖子。Marshal是不是申请非托管内存啊?我不大清楚什么时候调用托管内存,什么时候是非托管内存。
ref byte[] pBuf不就是数组的地址吗,还需要IntPtr 吗?
我现在是声明为SI_Write(IntPtr hPrinter,ref byte[] pBuf, UInt32 cdBuf, out UInt32 pcWritten);
与非托管不匹配。请问到底应该怎样声明呢?
回复于 2008-06-13
对于dll中LPVOID类型的指针,你就得申请非托管的内存拷贝数据过去.就按照我回复帖子中的声明方法声明即可.
给akirya的留言
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|版权声明|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo