Проблема с маршалингом BSTR
От: vdoscorp  
Дата: 27.06.11 14:36
Оценка:
Есть COM-интерфейс ISourceDB
interface ISourseDB : IUnknown{
    [propget, helpstring("Название источника данных"), helpcontext(11)] HRESULT DataSourse([out, retval] BSTR* pVal);
    [propput, helpstring("Название источника данных"), helpcontext(11)] HRESULT DataSourse([in] BSTR newVal);
    [propget, helpstring("Тип идентифинации"), helpcontext(12)] HRESULT IdentificationDB([out, retval] ULONG* pVal);
    [propput, helpstring("Тип идентифинации"), helpcontext(12)] HRESULT IdentificationDB([in] ULONG newVal);
    [, helpstring("Обновление данных"), helpcontext(13)] HRESULT Update_Dlg(void);
    [, helpstring("Сохранение результата"), helpcontext(14)] HRESULT Resulting(void);
};

Наследует его C# ActiveX компонент

    public partial class AcceptedClientsDataGrid : UserControl, ISourseDB
    {
        #region ISourseDB Members

        string ISourseDB.DataSourse
        {
            get
            {
                return m_DataSourse;
            }
            set
            {
                m_DataSourse = value;
            }
        }

        uint ISourseDB.IdentificationDB
        {
            get
            {
                return _IdentificationDB;
            }
            set
            {
                _IdentificationDB = value;
            }
        }

        void ISourseDB.Resulting()
        {
            MessageBox.Show("Resulting stub");
        }

        void ISourseDB.Update_Dlg()
        {
            MessageBox.Show("Data Source=" + m_DataSourse + ");
        }

}


Вызывает компонент MFC-приложение, которое отдает ему параметры подключения.

    Ax.Create(L"", wStyle, rect, this, IDD_MAP);
    IUnknown * pUn = Ax.GetControlUnknown();
    ISourseDB * pElem = NULL;
    pUn->QueryInterface(IID_ISourseDB, (void**)&pElem );

    Names_Sourse_DB * pDB =((CMainFrame *)GetParentFrame())->GetSourse_DB();
    pElem->put_IdentificationDB(pDB->mType);
    pElem->put_DataSourse(pDB->DBName);
    pElem->Update_Dlg();
    pElem->Release();


IdentificationDB получается на ура. А DataSourse приходит пустой.
Не подскажете в чем проблема?
маршалинг bstr com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.