vs2017生成COM组件,VB调用

新建项目 -- ATL项目  (项目属性--链接器--常规--逐用户重定向 --选为是)

vs2017生成COM组件,VB调用_第1张图片

 确定,跳出ATL选项,直接再点确定

addcom项目新增项目

vs2017生成COM组件,VB调用_第2张图片

添加类test(atl简单对象)

vs2017生成COM组件,VB调用_第3张图片

此时test.h中的头文件addcom_i.h尚未生成,只是一个空文件,会提示未定义标识符,不用管

在idl文件中新增接口方法(重要  -- vs2017以前可通过类视图中移到项目上展示xx而非__interface xx的那个项目右键添加方法),这里只能手动添加,添加在新增接口中

interface Itest : IDispatch
{

	[id(1)] HRESULT ggr([in]LONG n, [out]LONG* sum);
	[id(2)] HRESULT add([in]LONG a, [in]LONG b, [out]LONG* sum);

}

然后在test接口的类的.h文件和.cpp文件补充好

test.h

	STDMETHODIMP ggr(LONG n,LONG* sum);
	STDMETHODIMP add(LONG a, LONG b, LONG* sum);

test.cpp

STDMETHODIMP_(HRESULT __stdcall) Ctest::ggr(LONG n, LONG * sum)
{
	*sum = 124 + n;
	return S_OK;
}

STDMETHODIMP_(HRESULT __stdcall) Ctest::add(LONG a, LONG b, LONG * sum)
{
	*sum = a + b;
	return S_OK;
}

生成即可

 

VB中新建项目,在随便某个按钮实现中添加以下代码

ps:project--reference--找到目标dll添加(需要把目标dll加入到WOW64中并注册方可   32位对应sys32)

--否则提示 ActiveX component can't create object

Dim a As addcomLib.test
Set a = New test
Dim b As Long
a.Add 5, 7, b
 Print b
a.ggr 1, b
Print b

至此即可

你可能感兴趣的:(vs2017生成COM组件,VB调用)