我是这样做的,但不行,出现类型不对的错误..1.定义方法:
[id(4), helpstring("方法TestArray")] HRESULT TestArray([in] BSTR* inArray, [out,retval] BSTR* outArray);
2.实现
STDMETHODIMP CDBWrite::TestArray(BSTR* inArray, BSTR* outArray)
{
......
inArray[1]=::SysAllocString(L"xxxxx")
inArray[2]=::SysAllocString(L"nnnnn")
...... outArray=inArray; return S_OK;
}
3.ASP中调用
<% 
Dim arr(5)Set Obj=Server.CreateObject("ATLWEB.DBWrite") 
arr=Obj.TestArray(arr)
Response.Write(arr(1))
%> 
错误类型:
Microsoft VBScript 运行时错误 (0x800A000D)
类型不匹配: 'TestArray'
/willtopcrm/atl/atl.asp, 第 15 行
是否我用的方法错了,还是......请问如何解决,先谢了!!!!!!!!!!

解决方案 »

  1.   

    lwg7603(刑满释放人员) :
    不行啊,我把BSTR改成SAFEARRAY后,编译时出现以下错误.能否再说清楚一点吗?c:\temp\atlweb\DBWrite.h(23) : error MIDL2139 : type of the parameter cannot derive from void or void * : [ Type 'PVOID' ( Parameter 'inArray' ) ]
    c:\temp\atlweb\DBWrite.h(23) : error MIDL2105 : pointee / array does not derive any size : [ Field 'rgsabound' of Struct 'tagSAFEARRAY' ( Parameter 'inArray' ) ]
    c:\temp\atlweb\DBWrite.h(23) : error MIDL2139 : type of the parameter cannot derive from void or void * : [ Type 'PVOID' ( Parameter 'outArray' ) ]
    c:\temp\atlweb\DBWrite.h(23) : error MIDL2105 : pointee / array does not derive any size : [ Field 'rgsabound' of Struct 'tagSAFEARRAY' ( Parameter 'outArray' ) ]
    c:\temp\atlweb\DBWrite.h(23) : error MIDL2040 : [out] only parameter cannot be a pointer to an open structure : [ Parameter 'outArray' of Procedure 'TestArray' ( Interface 'IDBWrite' ) ]
    LINK : fatal error LNK1240: 未能编译 IDL 内容
      

  2.   

    [id(4), helpstring("method GetStringArray")] HRESULT GetStringArray([in, out] SAFEARRAY(BSTR) *psa);
      

  3.   

    STDMETHOD(GetStringArray)(/*[in, out]*/ SAFEARRAY** psa);ATL默认加入IDL的有问题,照上面的改
      

  4.   

    wei97081116(韦小宝):
    唉!!我改来改去都不行啊.应该就是以下这三个地方吧1:
    STDMETHODIMP CDBWrite::TestArray(BSTR* inArray, BSTR* outArray)
    {
    // TODO: 在此添加实现代码 return S_OK;
    }2:
    [id(4), helpstring("方法TestArray")] HRESULT TestArray([in] BSTR* inArray, [out,retval] BSTR* outArray);3:
    STDMETHOD(TestArray)(BSTR* inArray, BSTR* outArray);帮烦帮帮忙,我太差了......
      

  5.   

    1
    STDMETHODIMP CDBWrite::TestArray(SAFEARRAY** psa)
    {
    // TODO: 在此添加实现代码 return S_OK;
    }
    2
    [id(4), helpstring("method GetStringArray")] HRESULT GetStringArray([in, out] SAFEARRAY(BSTR) *psa);
    3
    STDMETHOD(TestArray)(/*[in, out]*/ SAFEARRAY** psa);
      

  6.   

    [id(4), helpstring("方法TestArray")] HRESULT TestArray([in] BSTR* inArray, [out,retval] VARIANT outArray);
    你用这个函数试试!