Здравствуйте, globus, Вы писали:
G>Сделал все как написано, и в ВБА скрипте при вызове "obj.Initialize o" выдает "Ошибка выполнения 13, Несоответствие типа"
G>менял "Dim o As Application" на "Dim o As Object" не помогло.
G>В idl у меня
G>G>interface IAddin : IDispatch
G>{
G> [id(1),helpstring("method Init")] HRESULT Initialize([in] IDispatch *pDisp);
G> [id(2),helpstring("method Uninit")] HRESULT Uninitialize([in] IDispatch *pDisp);
G>};
G>
Моя реализация выглядит так, у меня все работает, проверь у себя, возможно там какая-то мелкая ошибочка.
interface IWTWordAddin : IDispatch
{
[id(1), helpstring("method Init")] HRESULT Init(IDispatch * Application);
[id(2), helpstring("method Uninit")] HRESULT Uninit();
[id(3), helpstring("method DoCmd97")] HRESULT DoCmd97(BSTR Tag );
};
public:
STDMETHOD(DoCmd97)(BSTR Tag );
STDMETHOD(Uninit)();
STDMETHOD(Init)(IDispatch * Application);
////
STDMETHODIMP CWTWordAddin::Init(IDispatch *Application)
{
// ...
}
STDMETHODIMP CWTWordAddin::Uninit()
{
// ...
}
STDMETHODIMP CWTWordAddin::DoCmd97(BSTR Tag)
{
// ...
}
Dim o As Application
Dim obj As Object
Sub AutoExec()
Set obj = CreateObject("WTOfficeAddin.WTWordAddin.1")
Set o = ThisDocument.Application
obj.Init o
End Sub
Sub AutoExit()
If Not obj Is Nothing Then
obj.Uninit
End If
Set obj = Nothing
Set o = Nothing
End Sub
Sub OnCmd()
If Not obj Is Nothing Then
obj.DoCmd97 CommandBars.ActionControl.Tag
End If
End Sub