关于字符与地址转换(100分)

  • 主题发起人 主题发起人 hehuan
  • 开始时间 开始时间
H

hehuan

Unregistered / Unconfirmed
GUEST, unregistred user!
关于字符与地址转换:


这是Usb摄像头拍照的代码,非常好用:
SendMessage(hWndC,
WM_CAP_SAVEDIB,
0,
longint(pchar(SaveDialog1.FileName)));
或者
SendMessage(hWndC,
WM_CAP_SAVEDIB,
0,
longint(pchar('c:/111.bmp')));

但问题是,我不想生成临时bmp文件,而是直接存入TMemoryStream,然后直接存到数据库里去,但是试了很多次都不行:
photoStream : TMemoryStream;
photoStream := TMemoryStream.create;
photoStream.Position:=0;

SendMessage(hWndC,
WM_CAP_SAVEDIB,
0,
longint(pchar(photoStream.Position)));

或者
SendMessage(hWndC,
WM_CAP_SAVEDIB,
0,
longint((@photoStream.Position)));

也不行。

还请各位大大出手相助,非常感谢!
 
没有相关经验.帮你顶一下
 
你光使用这个函数肯定是不可以的。
因为你传递的是文件名,对于USB驱动来说,它会使用这个文件名去创建文件,你在本进程中的MemoryStream地址对他来说,毫无意义啊。

我认为,实在不行,你可以Hook这个文件的写入API,然后直接向你的Stream中写入。
相关APIHook也是很简单的,你可以再查看一些参考帮助。
 
楼上大哥,HOOK我以前在VC里学过,也许是不难,但是~要实现这个目标,是要去勾什么东西呢???

此外,我在内存里开辟一块区域,在内存中保存一个文件不行吗?我对Delphi不熟,麻烦指点一下,谢谢~
 
OpenFile
WriteFile

另外,我可能没有解释清楚,SendMessage的最后一个参数,USB设备是将此参数用来做文件名的,不管是什么语言,都不能改变这点。你的内存内存中保存文件的方式,Hook实现的就是这种转换。
 
感谢~不过Delphi语法我不熟悉。这个功能也不是必须的,先就这样吧。不过感谢啊~
 
接受答案了.
 
后退
顶部