1.用VB创建ActiveX类型的工程,重命名工程 和 模块名为 VBPrj、MATH
MATH.cls代码
Public Sub SayHello()
MsgBox "Hello", vbOKOnly, "VB ActiveX"
End Sub
Public Function Info() As String
Info = "info from VB COM"
End Function
2.生成VBPrj.dll
3.用VC创建一个Win32 Console的空项目,添加VCcall.cpp文件,代码如下:
//VCcaller.cpp
#include <stdio.h>
#import "../VBPrj.dll" //import dll
#include <atlbase.h>
#include <comutil.h>
#pragma comment(lib, "comsupp.lib ")
void test()
{
::CoInitialize(0);
VBPrj::_MATHPtr ptr("VBPrj.MATH");
ptr->SayHello();
_bstr_t ret=ptr->Info();
printf("%s\n",(char*)ret);
ptr=NULL;
::CoUninitialize();
}
int main()
{
test();
return 0;
}
连接COM的另一种方式:
void test()
{
::CoInitialize(0);
//VBPrj::_MATHPtr ptr("VBPrj.MATH"); //Prog 方式
VBPrj::_MATHPtr ptr;
ptr.CreateInstance(__uuidof(VBPrj::MATH));//guid方式
ptr->SayHello();
_bstr_t ret=ptr->Info();
printf("%s\n",(char*)ret);
ptr=NULL;
::CoUninitialize();
}
小技巧:
在#import "../VBPrj.dll" //import dll后,写其他调用代码前,先编译一次工程,使得dubug目录下生成VBPrj.tlh、VBPrj.tli文件,这样IDE输入就能智能联想,减少错误。