>VBでアクティブXDLLを作成したときに、引数としてVariantがた
>を持つ関数を作成しました。これを、VCでよびだし、VARIANT型
>の変数を渡すと、VBではサポートしてないといわれます。これは
>どうにもならないんでしょうか?
------------------- VB 側 -------------------------
Public Function X01(ByVal aa As Variant) As Long
Debug.Print aa
End Function
Public Function X02(ByRef aa As Variant) As Long
Debug.Print aa
End Function
Public Function Y01(ByVal aa As Long) As Long
Debug.Print aa
End Function
Public Function Y02(ByRef aa As Long) As Long
Debug.Print aa
End Function
---------------------------------------------------------
------------------- VC 側 -------------------------------
if (!AfxOleInit()){
AfxMessageBox("OLE初期化失敗");
return FALSE;
}
CTESTVCDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: ダイアログが <OK> で消された時のコードを
// 記述してください。
VARIANT aa;
aa.vt=VT_I4;
aa.lVal=123456;
_TESTS01 *testvb= new (_TESTS01);
COleException e;
CLSID clsid;
if (CLSIDFromProgID(OLESTR("TESTB.TESTS01"), &clsid) != NOERROR){
return FALSE;
}
LPUNKNOWN lpUnk;
LPDISPATCH lpDispatch;
if (GetActiveObject(clsid, NULL, &lpUnk) == NOERROR){
HRESULT hr = lpUnk->QueryInterface(IID_Idispatch, (LPVOID*)&lpDispatch);
lpUnk->Release();
if (hr == NOERROR)
testvb->AttachDispatch(lpDispatch, TRUE);
}
if (testvb->m_lpDispatch == NULL && !testvb->CreateDispatch(clsid, &e)){
return FALSE;
}
long bb;
bb=100;
testvb->Y01(bb);
testvb->Y02(&bb);
testvb->X01(aa);
testvb->X02(&aa);
delete testvb;
}
-----------------------------------------------------
VS6.0では、OKだと、思いますが.....
ソフト開発塾
投稿日:2002/04/05 21:08
投稿者:近藤
返信 引用返信 修正 削除