您的位置:首页 > 编程语言 > VB

在VC中调用VB编写的COM组件范例

2012-09-21 15:04 399 查看
VB调用VC的DLL大家应该不陌生,而VC如何调用VB编写的DLL这个问题对于搞VB开发的人来说可能却就是个问题。

为了广大的VB爱好者向VC进军,我就从VB开发者的角度来说说在VC中调用VB编写的COM组件的方法。我举个例子。

先说说VB开发一个COM组件。

用VB新建一个ActiveX DLL 工程,

然后修改工程名称为 MyVB

再修改默认的类名为 DEMO

然后再向类中添加一个函数作为测试用,如:
Visual Basic Code
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA"
( ByVal lpBuffer As String, nSize As Long )
As Long

'取得当前系统登陆的用户名称

Public Function GetMyName ( ) As String

Dim UserName As String

UserName = String ( 128, " " )

GetUserName UserName, 128

UserName = Trim ( UserName )

GetMyName = Left ( UserName, Len ( UserName ) - 1 )

End Function
然后保存工程并生成DLL文件,这时已经可以通过VB动态调用这个COM组件了。

如果在VB里,可以这样调用:

Visual Basic Code
Dim MyObj As Object

Set MyObj = CreateObject ( "MyVB.DEMO" )

MsgBox MyObj.GetMyName

Set MyObj = Nothing
这时可以看出,MyVB 是 COM 组件名称,DEMO 是 COM 组件的类名称,

而 VC 里调用可以这样做,如:

Visual C++ Code
//下面是指定DLL的位置

#import "C:/我的程序/VC调用COM/MyVB/MyVB.dll"

using namespace MyVB; //这里是COM组件名称

HRESULT ComInit();

#include "stdio.h"

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

ComInit();

_DEMOPtr MyObj; //注意这里,类名虽然是DEMO,但是定义声明应该是“_类名Ptr”来定义对象

MyObj.CreateInstance("MyVB.DEMO");

_bstr_t vRsinfo; //VB的String在VC里可以用_bstr_t类型,所以就用_bstr_t类型来接返回参数

vRsinfo = MyObj->GetMyName(); //这里使用对象方法取得当前用户名称

MessageBox(0, vRsinfo, "OK", MB_OK);

return 0;

}

HRESULT ComInit()

{

HRESULT hr = S_OK;

if FAILED(CoInitialize(NULL))

{

CoUninitialize();

hr = E_UNEXPECTED;

}

return hr;

}

以上 VC6 代码是建立一个 Win32 应用程序(Win32 Application),

选择 An empty project,然后再添加并添加一个 C++ Source File,

在 Windows XP 下测试通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: