如何将SAFEARRAY(字节数组)放入HTML隐藏字段
How do I put SAFEARRAY (array of bytes) to HTML Hidden field
我想从active-x组件中获取字节数组,将其存储在html表单输入隐藏字段中,然后通过表单提交将其传递给服务器。我该怎么做?
MIDL:
HRESULT Data([out, retval] SAFEARRAY(VARIANT) *pArray);
C++/ATL
STDMETHODIMP MyActiveX::get_Data(SAFEARRAY **pArray)
{
CComSafeArray<BYTE> arr;
for (int i = 0; i < 10; i++)
{
CComVariant a;
a = (BYTE)i;
arr.Add(a);
}
arr.CopyTo(pArray);
return S_OK;
}
Javascript:
$("#hiddenField").val(myActiveX.Data);
浏览器告诉我:类型不匹配
虽然我不熟悉你的确切情况,但我以前见过一些类似的情况。
使用$('#hiddenField')
将数据放入字段是正确的。如果在该字段上放置了name
属性,使其成为HTTP提交的一部分,那么该部分就很好。
至于myActiveX.Data
,我想这是某种JavaScript对象。请记住,只有一个字符串可以放入HTML输入中;它不保存二进制数据。
我要做的是在$("#hiddenField").val(myActiveX.Data);
之前放置一个断点。如果您不熟悉debugger
关键字,请使用它。在调试器中运行代码并查看myActiveX.Data
值的结构。它可能有某种包装器字段。
或者,如果您无法访问好的JavaScript调试器,请尝试以下">
for(x in myActiveX.Data)
alert(x + ": " + myActiveX.Data[x]);
我假设C++代码是服务器端代码。
处理此问题的最佳方法是将SAFEARRAY序列化。从那里你可以用两种方式来处理它。
首先,连载。我看过MSDN,我认为可以使用LPSAFEARRAY_Marshal和LPSAFEARARRAY_Unmarshal(使用可选的IDispatch
或IUnknown
IID来指定类型,但文档中没有说明如何使用(或LPSAFEARAY_UserMarshal和LPSAFEARRAY_UserUnmarshall将SAFEARRAY转换为串行格式。
其次,处理数据传输。
- 选项1:将串行化的数据保存在服务器端,并将表示保存的文件的令牌放入隐藏字段
- 选项2:使用Hex、Base64等将数据编码为可打印格式,并将数据放入隐藏字段
无论哪种方式,当您需要取回数据时,只需使用匹配函数将其反序列化即可。
- 尝试将一个三.js OBJLoader 放入 HTML 画布中
- 迭代所有JSON对象并放入html中
- 从javascript对象中获取一个src-img,并将其放入HTML中
- 如何将php变量放入HTML表单中
- 将Javascript变量放入html值中
- 将javascript计算结果自动放入HTML表单中
- 将 AJAX 数据放入 HTML 并显示在页面上的最佳方法
- 将 json asnwer 放入 html 标记中
- 如何使用 jQuery 将段落的原始文本格式放入 HTML 段落元素中
- 从 ListBox 获取 SelectList obejct 并放入 HTML 选择列表中
- jQuery 如何将数据放入 HTML (.data)
- 如何使用javascript将数据放入HTML表中
- 使用JS或JQuery将URL变量放入HTML表单中
- 将PHP结果放入HTML页面中
- 如何将json数据放入html
- 将Json放入HTML表中
- 如何将各种var放入HTML中创建的容器中
- 如何使用ajax和php将数据从数据库表放入html表
- 使用javascript将虚拟数据放入html模型中
- 将文本文件中的数据放入HTML Android Webview中