如何用VC调用VB的DLL

lorl2 2009-12-09 06:10:18
VB的DLL属于COM

如果我们自己用VB调一个COM的DLL是最方便的,只需要有这个DLL的二进制文件就可以了
我们在VB中可以直接"引用"一下这个文件,然后按F2,就可以看到这个DLL里的所有接口,方法,结构(TYPE)及常量等等
写代码的过程也可以在对象名后面打上个点号,VB就会自动列出所有的方法属性及形参

如果我用VB写了一个DLL,想用VC来调用,怎么办.
隔行如隔山,GOOGLE了好久,都找不到什么有用的信息,全是Ctrl+C


假调我的DLL代码如下


=============

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "Class1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Public Sub HelloWorld()
MsgBox "HelloWorld"
End Sub



==============

可以看到,只有一个Class1的类,里面只有一个HelloWorld()方法



编译成DLL文件后,别人用VB来调,可以这样
在"引用"里找添加这个文件

用这样的代码调用

Private Sub Command1_Click()
Dim objClass As myTest.Class1 '定义变量

'实例化
Set objClass = New myTest.Class1

'调用这个对象的一个方法
Call objClass.HelloWorld

'释放对象
Set objClass = Nothing
End Sub






换成VC要调用这个DLL,该怎么办?
我在网上刮了好久,好像据说可以这样子弄,可是一直编译不通过

#include "stdafx.h"
#include "C:\Program Files\Microsoft Visual Studio\MyProjects\dfgdfg\Debug\Test.tlh"

//#import "C:\Documents and Settings\Administrator\桌面\VB调用方式\Dll源代码\Test.dll"

int main(int argc, char* argv[])
{
CoInitialize(NULL);
//myTest::Class1Ptr p(__uuidof(myTest::Class1));
myTest::Class1 p=NULL;
p.CreateInstance(__uuidof(myTest::Class1));
p->HelloWorld();
return 0;
}




...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lorl2 2009-12-09
  • 打赏
  • 举报
回复
呵呵,还是自己折腾出来了
今天加了一堆VC的QQ群问人,都问不到答案,懂人的摆谱,不懂的人装B。求人还是不如求己。


// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#import "c:\test\TestDll.dll" //这里就像VB中的“引用”一样,打上这行代码后,在IDE中按下Ctrl+J 一样可以出来提示的。

int _tmain(int argc, _TCHAR* argv[])
{
//这句是例行公事,必需的
CoInitialize(NULL);

//我在VB的那个DLL就是myTest.Class1
//myTest::_Class1Ptr 就是变量类形. objClass是定义的变量名 __uuidof 例行公事 myTest::Class1真正的目标
myTest::_Class1Ptr objClass(__uuidof(myTest.Class1)); //==dim objClass as New myTest.Class1

//调用其中的一个方法
objClass->HelloWorld(); //= Call objClass.Hello()

//释放对象
objClass.Release(); //=Set objClass=Nothing

printf("Test End \n");
return 0;
}


hwmys 2009-12-09
  • 打赏
  • 举报
回复
我也试过,不行。看来要通过其它方式了...............关注
贝隆 2009-12-09
  • 打赏
  • 举报
回复
关注
  • 打赏
  • 举报
回复
反方向不懂。
发到c版试试

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧