Thread: Why is this not working??? PLEASE HELP ANYONE!!!!

  1. #1
    Unregistered
    Guest

    Why is this not working??? PLEASE HELP ANYONE!!!!

    Hello All, thanks for reading this and for any help you may provide. I am having a problem, I used the "Building Office 2K Addins" article as a guide and I am trying to automate MS Word but I keep getting a compiler error. The error is:

    StdAfx.obj : fatal error LNK1179: invalid or corrupt file: duplicate comdat "_IID_CanvasShapes"

    I cannot figure out why I keep getting this link error. I am not sure what is causing this. Does any have any idea that may work, it works in the article but not for me. I have included a lot of the code, if anyone needs to see more, just let me know. I am in desperate need and am clueless!!!!

    Why would I be getting error. I cannot get around it! PLEASE HELP!!!!

    -----------------------------------------------------------------------------------
    Instead of importing Outlook, I am trying to import Word in the stdafx.h:

    #import "C:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" rename_namespace("Office") named_guids
    using namespace Office;

    #import "C:\Program Files\Microsoft Office\Office10\MSWORD.olb" rename("ExitWindows", "WordExitWindows"), named_guids, raw_interfaces_only
    using namespace Word;

    -----------------------------------------------------------------------------------
    My stdafx.cpp looks like this:

    #include "stdafx.h"

    #ifdef _ATL_STATIC_REGISTRY
    #include
    #include
    #endif

    #include

    -----------------------------------------------------------------------------------
    my addin.h looks like this:

    #ifndef __ADDIN_H_
    #define __ADDIN_H_

    #include "resource.h" // main symbols
    #import "C:\Program Files\Common Files\Designer\MSADDNDR.DLL" raw_interfaces_only, raw_native_types, no_namespace, named_guids

    /////////////
    extern _ATL_FUNC_INFO OnClickButtonInfo;


    class ATL_NO_VTABLE CAddin :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CAddin, &CLSID_Addin>,
    public ISupportErrorInfo,
    public IDispatchImpl<IAddin, &IID_IAddin, &LIBID_WORDADDINLib>,
    public IDispatchImpl<_IDTExtensibility2, &IID__IDTExtensibility2, &LIBID_AddInDesignerObjects>,
    public IDispEventSimpleImpl<1, CAddin, &__uuidof(Office::_CommandBarButtonEvents)>
    {
    public:
    typedef IDispEventSimpleImpl</*nID =*/ 1,CAddin, &__uuidof(Office::_CommandBarButtonEvents)> CommandButton1Events;
    CAddin()
    {
    }

    DECLARE_REGISTRY_RESOURCEID(IDR_ADDIN)

    DECLARE_PROTECT_FINAL_CONSTRUCT()

    BEGIN_COM_MAP(CAddin)
    COM_INTERFACE_ENTRY(IAddin)
    //DEL COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(ISupportErrorInfo)
    COM_INTERFACE_ENTRY2(IDispatch, IAddin)
    COM_INTERFACE_ENTRY(_IDTExtensibility2)
    END_COM_MAP()

    BEGIN_SINK_MAP(CAddin)
    SINK_ENTRY_INFO(1, __uuidof(Office::_CommandBarButtonEvents), /*dispid*/0x01, OnClickButton, &OnClickButtonInfo)
    END_SINK_MAP()

    // ISupportsErrorInfo
    STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
    void __stdcall OnClickButton(IDispatch * /* Office::_CommandBarButton**/ Ctrl, VARIANT_BOOL * CancelDefault);

    // IAddin
    public:
    // _IDTExtensibility2
    STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
    {
    CComPtr < Office::_CommandBars> spCmdBars;
    CComPtr < Office::CommandBar> spCmdBar;

    CComQIPtr <Word::_Application> spApp(Application);
    ATLASSERT(spApp);

    spApp->get_CommandBars(&spCmdBars);

    ATLASSERT(spCmdBars);

    CComVariant vName("PSI Button");
    CComPtr <Office::CommandBar> spNewCmdBar;

    CComVariant vPos(1);

    CComVariant vTemp(VARIANT_TRUE);
    CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);

    spNewCmdBar = spCmdBars->Add(vName, vPos, vEmpty, vTemp);
    CComPtr <Office::CommandBarControls> spBarControls;
    ATLASSERT(spBarControls);

    CComVariant vToolBarType(1);

    CComVariant vShow(VARIANT_TRUE);

    CComPtr < Office::CommandBarControl> spNewBar;

    spNewBar = spBarControls->Add(vToolBarType, vEmpty, vEmpty, vShow);
    ATLASSERT(spNewBar);

    _bstr_t bstrNewCaption(OLESTR("Item1"));
    _bstr_t bstrTipText(OLESTR("Tooltip for Item 1"));

    CComQIPtr <Office::_CommandBarButton> spCmdButton(spNewBar);

    ATLASSERT(spCmdButton);

    HBITMAP hBmp = (HBITMAP)::LoadImage(_Module.GetResourceInstance() ,
    MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS);

    ::OpenClipboard(NULL);
    ::EmptyClipboard();
    ::SetClipboardData(CF_BITMAP, (HANDLE)hBmp);
    ::CloseClipboard();
    :eleteObject(hBmp);

    spCmdButton->PutStyle(Office::msoButtonIconAndCaption);

    HRESULT hr = spCmdButton->PasteFace();
    if(FAILED(hr))
    return hr;

    spCmdButton->PutVisible(VARIANT_TRUE);
    spCmdButton->PutCaption(OLESTR("Item 1"));
    spCmdButton->PutEnabled(VARIANT_TRUE);
    spCmdButton->PutTooltipText(OLESTR("Tooltip for Item1"));
    spCmdButton->PutTag(OLESTR("Tag for Item 1"));

    spNewCmdBar->PutVisible(VARIANT_TRUE);

    m_spButton = spCmdButton;

    _bstr_t bstrNewMenuText(OLESTR("Menu Item 1"));

    CComPtr <Office::CommandBarControls> spCmdCtrls;
    CComPtr <Office::CommandBarControls> spCmdBarCtrls;
    CComPtr <Office::CommandBarPopup> spCmdPopup;
    CComPtr <Office::CommandBarControl> spCmdCtrl;

    hr = spCmdBars->get_ActiveMenuBar(&spCmdBar);

    if(FAILED(hr))
    return hr;

    spCmdCtrls = spCmdBar->GetControls();
    ATLASSERT(spCmdCtrls);

    CComVariant vItem(5);
    spCmdCtrl = spCmdCtrls->GetItem(vItem);
    ATLASSERT(spCmdCtrl);

    IDispatchPtr spDisp;

    spDisp = spCmdCtrl->GetControl();

    CComQIPtr <Office::CommandBarPopup> ppCmdPopup(spDisp);
    ATLASSERT(ppCmdPopup);

    spCmdBarCtrls = ppCmdPopup->GetControls();
    ATLASSERT(spCmdBarCtrls);

    CComVariant vMenuType(1);
    CComVariant vMenuPos(6);
    CComVariant vMenuEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
    CComVariant vMenuShow(VARIANT_TRUE);
    CComVariant vMenuTemp(VARIANT_TRUE);

    CComPtr <Office::CommandBarControl> spNewMenu;

    spNewMenu = spCmdBarCtrls->Add(vMenuType, vMenuEmpty, vMenuEmpty, vMenuEmpty, vMenuTemp);
    ATLASSERT(spNewMenu);

    spNewMenu->PutCaption(bstrNewMenuText);
    spNewMenu->PutEnabled(VARIANT_TRUE);
    spNewMenu->PutVisible(VARIANT_TRUE);

    CComQIPtr <Office::_CommandBarButton> spCmdMenuButton(spNewMenu);
    ATLASSERT(spCmdMenuButton);

    spCmdMenuButton->PutStyle(Office::msoButtonIconAndCaption);

    spCmdMenuButton->PasteFace();
    spNewMenu->PutVisible(VARIANT_TRUE);

    hr = CommandButton1Events:ispEventAdvise((IDispatch*)
    m_spButton);
    if(FAILED(hr))
    return hr;

    bConnected = true;

    return S_OK;



    }

    STDMETHOD(OnDisconnection)(ext_DisconnectMode RemoveMode, SAFEARRAY * * custom)
    {
    if(bConnected)
    {
    HRESULT hr = CommandButton1Events:ispEventUnadvise((IDispatch
    *)m_spButton);
    if(FAILED(hr))
    return hr;
    }
    return S_OK;
    }

    STDMETHOD(OnAddInsUpdate)(SAFEARRAY * * custom)
    {
    return E_NOTIMPL;
    }
    STDMETHOD(OnStartupComplete)(SAFEARRAY * * custom)
    {
    return E_NOTIMPL;
    }
    STDMETHOD(OnBeginShutdown)(SAFEARRAY * * custom)
    {
    return E_NOTIMPL;
    }
    private:
    CComPtr<Office::_CommandBarButton> m_spButton;
    bool bConnected;
    };

    #endif //__ADDIN_H_

    ------------------------------------------------------------------------------------
    my addin.cpp file looks like:

    // Addin.cpp : Implementation of CAddin
    #include "stdafx.h"
    #include "WordAddin.h"
    #include "Addin.h"

    /////////////////////////////////////////////////////////////////////////////
    // CAddin
    _ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF | VT_BOOL}};

    STDMETHODIMP CAddin::InterfaceSupportsErrorInfo(REFIID riid)
    {
    static const IID* arr[] =
    {
    &IID_IAddin
    };
    for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
    if (InlineIsEqualGUID(*arr[i],riid))
    return S_OK;
    }
    return S_FALSE;
    }

    void __stdcall CAddin::OnClickButton(IDispatch* /*Office::_CommandBarButton* */ Ctrl,VARIANT_BOOL * CancelDefault)
    {
    USES_CONVERSION;
    CComQIPtr<Office::_CommandBarButton> pCommandBarButton(Ctrl);
    //the button that raised the event. Do something with this...
    // MessageBox(NULL, "Clicked Button1", "OnClickButton", MB_OK);

    }

  2. #2
    Registered User
    Join Date
    May 2002
    Posts
    63
    Firstly, there is an error in your code, a tip: it is to do with something that you did which uses the StdAfx library. Secondly, Im not going to read through all that code to find it. Just look in your functions, somewhere you will find the error, maybe AfxMessageBox or something like that, just do a search for anything starting with Afx.

    Hope this helps
    tudehopet uses Borland Compiler 5.5
    and Visual C++ 6.

  3. #3
    Unregistered
    Guest
    Truthfully, it doesn't help at all. I am not using Afx__________ anything, not AfxMessageBox, etc. in the entire project. So really, this is not the problem. Any other ideas???

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Function not working
    By sloopy in forum C Programming
    Replies: 31
    Last Post: 11-12-2005, 08:08 PM
  2. Program Not working Right
    By raven420smoke in forum C++ Programming
    Replies: 2
    Last Post: 09-16-2005, 03:21 AM
  3. Trying to eject D drive using code, but not working... :(
    By snowfrog in forum C++ Programming
    Replies: 3
    Last Post: 05-07-2005, 07:47 PM
  4. x on upper right corner not working
    By caduardo21 in forum Windows Programming
    Replies: 1
    Last Post: 02-20-2005, 08:35 PM
  5. cygwin -> unix , my code not working properly ;(
    By CyC|OpS in forum C Programming
    Replies: 4
    Last Post: 05-18-2002, 04:08 AM