描述:
在 VB 中能够实现与 ATL 做的 COM 实现用结构做方法的参数,但把代码贴入网页中就不能运行,我不会做网页,希望大家帮忙啊
VC 中方法定义如下:
[id(3), helpstring("method GetRead")] HRESULT GetRead([out]READ *p);
VB 中调用代码如下
Dim obj As New TESTLib.MyObject
Dim pr As READ
Call obj.GetRead(pr)
此时能够正常返回
但在网页中却行不通
dim obj
set obj = Createobject("TEST.MyObject")
Dim pr As READ
Call obj.GetRead(pr)
网页中总是提示:没有 READ 的声明,我该怎么做才能实现与 VB 中同样的结果呢?
解决方案1:
void CMyIeDlg::putArrays()
{
HRESULT hr;
SAFEARRAY* psaStudent = NULL;
SAFEARRAYBOUND rgbounds = { 4, 0 };
studentsInfo *pStudentStruct = NULL;
psaStudent = SafeArrayCreate(VT_VARIANT, 1, &rgbounds);
hr = SafeArrayAccessData(psaStudent, reinterpret_cast<PVOID*>(&pStudentStruct));
pStudentStruct[0].grade = 3;
pStudentStruct[0].name = SysAllocString(L"Shaun");
pStudentStruct[0].type = class_Clown;
pStudentStruct[1].grade = 8;
pStudentStruct[1].name = SysAllocString(L"Fred");
pStudentStruct[1].type = school_Bully;
pStudentStruct[2].grade = 12;
pStudentStruct[2].name = SysAllocString(L"Steve");
pStudentStruct[2].type = teachers_Favorite;
pStudentStruct[3].grade = 3;
pStudentStruct[3].name = SysAllocString(L"Linda");
pStudentStruct[3].type = teachers_Favorite;
hr = SafeArrayUnaccessData(psaStudent);
m_array.vt = VT_ARRAY;
m_array.parray = psaStudent;
}
加上参数更简单
void CMyIeDlg::putArrays(SAFEARRAY* psaStudent)
{
m_array.vt = VT_ARRAY;
HRESULT hr = SafeArrayAccessData(psaStudent,m_array.parray );
SafeArrayUnaccessData(psaStudent);
return hr;
}
或者
void CMyIeDlg::putArrays(VARIANT* psaStudent)
{
HRESULT hr = SafeArrayAccessData(psaStudent.parray ,m_array.parray );
SafeArrayUnaccessData(psaStudent.parray );
return hr;
}