如何将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等将数据编码为可打印格式,并将数据放入隐藏字段
无论哪种方式,当您需要取回数据时,只需使用匹配函数将其反序列化即可。
- 将一系列整数放入类的最佳方法是什么?
- 如何在 c++ 中比较 2 个链表并将匹配的数据放入另一个链表中
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 在将字符串放入字符串向量时遇到问题?
- 输入验证将数字放入向量中
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- 如何在 EOF 之前从文件中读取并将其放入字符串中?
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- 将对象放入地图后打印对象
- C++ - 是否将常量幻数放入命名空间
- 如何在C++中将可调用对象放入地图中?
- 如何在 c++ 的 toString 方法中使用 setw(x) 并将其放入变量或建议中?
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- C++:有效地将Sha256摘要放入OpenSSL Bignum?
- 我觉得我放入结构中的输入代码可以压缩,关于如何在保持代码简短的同时保持数据个性化的任何建议?
- 如何获取C++中的输入并将其"split"到列表中?换句话说,取 N 个输入并放入 N 长度的数组中
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 结构新手,我对如何从 void 函数中返回值并将其放入另一个函数感到困惑
- 如何将SAFEARRAY(字节数组)放入HTML隐藏字段