創建ActiveX工程後,只能靠手動添加函數,這裏要注意四個地方都要修改,才能最終達到效果:
1、.h中:加入函數聲明
afx_msg short display(LPCTSTR lpszData);
2、.cpp中加入函數映射
BEGIN_DISPATCH_MAP(CtestCtrl, COleControl)
DISP_FUNCTION_ID(CtestCtrl,"display",2223,display,VT_I2,VTS_BSTR)
END_DISPATCH_MAP()
在此處注意下:DISP_FUNCTION_ID的幾個參數: I、該類的名稱
II、類中擴展名同後面的函數名一樣,只是多了雙引號
III、顯示的ID(儘量用大點的,一面和某些ID衝突)
IV、函數名
V、返回值類型:
VI、參數類型
VT_EMPTY = 0,
VT_NULL = 1,
VT_I2 = 2,
VT_I4 = 3,
VT_R4 = 4,
VT_R8 = 5,
VT_CY = 6,
VT_DATE = 7,
VT_BSTR = 8,
VT_DISPATCH = 9,
VT_ERROR = 10,
VT_BOOL = 11,
VT_VARIANT = 12,
VT_UNKNOWN = 13,
VT_DECIMAL = 14,
VT_I1 = 16,
VT_UI1 = 17,
VT_UI2 = 18,
VT_UI4 = 19,
VT_I8 = 20,
VT_UI8 = 21,
VT_INT = 22,
VT_UINT = 23,
VT_VOID = 24,
VT_HRESULT = 25,
VT_PTR = 26,
VT_SAFEARRAY = 27,
VT_CARRAY = 28,
VT_USERDEFINED = 29,
VT_LPSTR = 30,
VT_LPWSTR = 31,
VT_FILETIME = 64,
VT_BLOB = 65,
VT_STREAM = 66,
VT_STORAGE = 67,
VT_STREAMED_OBJECT = 68,
VT_STORED_OBJECT = 69,
VT_BLOB_OBJECT = 70,
VT_CF = 71,
VT_CLSID = 72,
VT_VECTOR = 0x1000,
VT_ARRAY = 0x2000,
VT_BYREF = 0x4000,
VT_RESERVED = 0x8000,
VT_ILLEGAL = 0xffff,
VT_ILLEGALMASKED = 0xfff,
VT_TYPEMASK = 0xfff
VI、參數類型 3、CPP中加入函數實現:
short CtestCtrl::display(LPCTSTR lpszData)
{
AfxMessageBox(lpszData);
}
4、.idl 文件中還要加相關的接口調度說明 [id(2223)]short display(BSTR lpszData);
這四個地方加好了就完工了~~