开始在工程中是传PBYTE pucStream和DWORD dwLenStream, 后来发现, 在控件中得到的数据长度虽然相同,但是内容却变了,因为传递的流有1M~2M, 前面 70~100字节都是相同的, 后面内容的就不同了.
找到篇资料, 可以解决从exe向ocx传递ByteStream的问题.
http://www.codeproject.com/KB/edit/hexeditor.aspx?bmkres=success
从这篇资料中找到的exe和控件之间传递字节流的用法,在实际工程中用过了,有效.
写个实验工程总结一下, 放2个接口.
1. 字节流方向 exe to ocx.
1. 字节流方向 ocx to exe.
在实际工程中,传递的是文件流, 1~4M正常。在这个实验中,定位传递的文件流大小为20M, 应该能验证这种方法传递大型字节流的正确性.
先写了个程序,迁移了Demo原有的功能, 调用了控件, 实现了16进制文件的打开,编辑,保存.
控件本身的代码再研究, 16进制编辑的显示效果不如UltraEdit, 要改下控件的代码, 向UltraEdit靠齐.
工程下载点:
http://download.csdn.net/source/3021318
srcHexEditorModify_16进制文件编辑器_2011_0214_1307
<2011_0214_1921>
做了个实验, 验证由Dll返回字节流给调用方
做这个实验的目的: 按照正常的调用, 如果Ocx或DLL返回长度未知的Buffer, 需要先查寻Buffer长度. 然后开辟空间, 再去真正的去执行返回Buffer的操作. 按照上面的资料, 使用COleSafeArray, 一次性的执行返回Buffer操作, 省去了一道手续.
调用方代码:
DLL方代码:
<2011_0215_1005>
工程下载点:
http://download.csdn.net/source/3022002
src防止跨进程删除无效指针_EXE和DLL互相传递字节流_V2011_0214_1945