是这样的,我用VC作了一个DLL,想提供一个借口函数,
接受VB端提供的二维字符串数组,用什么方法才能实现呢?最好有示例代码,不胜感激[id(4), helpstring("method゙ setin")] HRESULT setin([in] SAFEARRAY(VARIANT) arr);这是我在ATL的Dll中声明的方法,可是VB端访问的时候,根本不提示参数,没办法调用呀?!

解决方案 »

  1.   

    用 BSTR , 因为VB的字符串是 UNICODE , 所以要用 BSTR
    注意用 SysAllocString 分配内存我给你个例子看看 interface IChgString : IDispatch
    {
    //Standard Server Side Component Methods
    HRESULT OnStartPage([in] IUnknown* piUnk);
    HRESULT OnEndPage();
    [id(1), helpstring("method Change")] HRESULT Change([in]const BSTR bstrIn, [out,retval] BSTR* bstrRetval);
    };STDMETHODIMP CChgString::Change(BSTR bstrIn, BSTR* bstrRetval)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO:在此添加实现代码

    _bstr_t tempstring = bstrIn; ..............// 你的实现过程

    COleVariant bstrKey(tempstring);
    *ChgString = ::SysAllocString(bstrKey.bstrVal); return S_OK;
    }
      

  2.   

    用 BSTR , 因为VB的字符串是 UNICODE , 所以要用 BSTR
    注意用 SysAllocString 分配内存我给你个例子看看 interface IChgString : IDispatch
    {
    //Standard Server Side Component Methods
    HRESULT OnStartPage([in] IUnknown* piUnk);
    HRESULT OnEndPage();
    [id(1), helpstring("method Change")] HRESULT Change([in]const BSTR bstrIn, [out,retval] BSTR* bstrRetval);
    };STDMETHODIMP CChgString::Change(BSTR bstrIn, BSTR* bstrRetval)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO:在此添加实现代码

    _bstr_t tempstring = bstrIn; ..............// 你的实现过程

    COleVariant bstrKey(tempstring);
    *bstrRetval = ::SysAllocString(bstrKey.bstrVal); return S_OK;
    }