VBで作成したActiveX.exeをVCのDLLから起動するには?


hiro  2002-09-10 09:13:42  No: 50382  IP: [192.*.*.*]

現在VBで作成したActiveX.exeをVCで作成しているDLLから
起動するプログラムを作成しているのですが、ActiveX.exeの起動
までは出来ているのですが起動されたActiveX.exeが途中でエラー
(オブジェクト変数またはWithブロック変数が設定されていません。)が出たりする。
このActiveX.exe自体はVBからの起動では正常に動作しています。
VCから起動する場合にはなにか設定が足りないと思い参考書やインターネット
で調べているのですがなかなか情報が見つからなくて困っています。
ご存知のかたがいればご教授をお願いします。
VCからの呼び出しは以下のように記述しています。

#import "C:\Program Files\Hitachi\CE401\CE210.exe" no_namespace named_guids

class CEventSink : public __CGroupingOrder
{
public :
  CEventSink() : m_cRef(0)
  {
  }
  virtual  ~CEventSink()
  {
  }
  //
  //  IUnknown::QueryInterface()
  //
  virtual HRESULT __stdcall  QueryInterface(const IID& riid, void** ppvObj)
  {
    if(IsEqualGUID(riid,DIID___CGroupingOrder) || IsEqualGUID(riid,IID_IDispatch)
      || IsEqualGUID(riid,IID_IUnknown)) {
      *ppvObj = this;
      AddRef();
      return S_OK;
    } else {
      *ppvObj = NULL;
      return E_NOINTERFACE;
    }
  }
  //
  //  IUnknown::AddRef()
  //
  virtual unsigned long __stdcall  AddRef()
  {
    return ++m_cRef;                  // 参照カウンタ更新
  }
  //
  //  IUnknown::Release()
  //
  virtual unsigned long __stdcall  Release()
  {
    if(--m_cRef == 0) {
      delete this;
      return 0;
    }
    return m_cRef;
  }
  //
  //  IDispatch::ShowReceivedList()
  //
  virtual HRESULT __stdcall  ShowReceivedList(long*,VARIANT_BOOL*)
  {
    return E_NOTIMPL;
  }
  //
  //  IDispatch::ShowGroupingMain()
  //
  virtual HRESULT __stdcall  ShowGroupingMain(long*,VARIANT_BOOL*)
  {
    return E_NOTIMPL;
  }
  //
  //  IDispatch::GetTypeInfoCount()
  //
  virtual HRESULT __stdcall  GetTypeInfoCount(unsigned int* pctinfo)
  {
    return E_NOTIMPL;
  }
  //
  //  IDispatch::GetTypeInfo()
  //
  virtual HRESULT __stdcall  GetTypeInfo(unsigned int iTInfo,LCID lcid,ITypeInfo** ppTInfo)
  {
    return E_NOTIMPL;
  }
  //
  //  IDispatch::GetIDsOfNames()
  //
  virtual HRESULT __stdcall  GetIDsOfNames(const IID& riid,LPOLESTR* rgszNames,
                  unsigned int cName,LCID lcid,DISPID* rgDispId)
  {
    return E_NOTIMPL;
  }
  //
  //  IDispatch::Invoke()
  //
  virtual HRESULT __stdcall  Invoke(DISPID dispIdMember,const IID& riid,
                  LCID lcid,WORD wFlags,DISPPARAMS* pDispParams,
                  VARIANT* pVarResult,EXCEPINFO* pExcepInfo,
                  unsigned int* puArgErr)
  {
    return S_OK;
  }
private :
  unsigned long  m_cRef;                  // 参照カウンタ
};

void Call_ReceivedList(
    HWND            hWnd
)
{
    _CConnectorPtr      pCConnectorPtr;
    _CGroupingOrderPtr  pCGroupingOrderPtr;

    CoInitialize(NULL);
    pCConnectorPtr.CreateInstance(CLSID_CConnector, NULL,CLSCTX_LOCAL_SERVER);
    pCGroupingOrderPtr = pCConnectorPtr->GetMyClass();
    pCGroupingOrderPtr->ShowReceivedList((long)hWnd);
    CoUninitialize();
}

編集 削除