vba调用vs2005使用atl开发的com组件

1、新建工程

New -- Project -- ATL Project

勾选Allow merging of proxy/stub code

vba调用vs2005使用atl开发的com组件_第1张图片

2、添加接口

右键工程 --  Add  --  ATL Simple Object

vba调用vs2005使用atl开发的com组件_第2张图片

vba调用vs2005使用atl开发的com组件_第3张图片



3、添加接口函数

类视图中,右键接口 --  Add  --  Add Method

vba调用vs2005使用atl开发的com组件_第4张图片

4、添加事件

类视图中,展开类型库,右键连接点接口  --  Add  --  Add Method

vba调用vs2005使用atl开发的com组件_第5张图片

5、实现连接点事件

vba调用vs2005使用atl开发的com组件_第6张图片

vba调用vs2005使用atl开发的com组件_第7张图片



点击确定后,会生成事件代码。

6、触发事件。

STDMETHODIMP CComDllExample::Method1(LONG arg1)
{
	// TODO: Add your implementation code here
	Fire_Event1(2.0);
	return S_OK;
}
在Method1中调用一下生成的Fire_Event1函数。

7、编译工程。


VBA中调用生成的组件

1、打开vba开发工具,添加ComDll组件的引用

通过 工具  --   引用 打开引用管理器。

vba调用vs2005使用atl开发的com组件_第8张图片

2、调用代码

Private WithEvents mComDll As ComDllExample

Private Sub mComDll_Event1(ByVal arg1 As Single)
    Debug.Print Str(arg1)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set mComDll = New ComDllExample
    mComDll.Method1 (20)
End Sub

需要注意的地方

a)comdll接口函数参数类型要和VB兼容。  遇到过设置ULONG类型的参数,但是到VBA里面提示类型无法解析,改成LONG就好了。

b)VB里面,使用WithEvents处理对象事件时,还需要单独set一下对象实例。





你可能感兴趣的:(windows,VBA,com,VS2005,atl)