現在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();
}