CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

送分题:在VB中如何调用VC创建的DLL

楼主langjingling(蓝金灵)2001-12-28 09:49:17 在 VC/MFC / 基础类 提问

问题点数:50、回复次数:39Top

1 楼langjingling(蓝金灵)回复于 2001-12-28 09:56:41 得分 0

怎么没有人回答啊?Top

2 楼darknessun(darkness)回复于 2001-12-28 09:57:12 得分 0

先在公共模块中声明,然后就可以在程序里调用了。  
  声明方法如下:  
  Public   Declare   Function   接口函数名   Lib   "库名"   (参数列表)   As   返回值类型  
  Top

3 楼langjingling(蓝金灵)回复于 2001-12-28 10:05:37 得分 0

我也是这么做的,不过程序运行时老是提示出错。  
  错误代码为49  
  DLL调用约定错误  
  然后就返回到VB中调用函数的地方Top

4 楼darknessun(darkness)回复于 2001-12-28 10:09:13 得分 30

你的VC动态库里函数extern   "C"   __declspec(dllexport)写了吗?  
  或者写了还不行,那你在动态库的工程里加一个.def文件来EXPORT所有你想让外部调用的接口。  
  Top

5 楼shupianbird(birdsun)回复于 2001-12-28 10:10:25 得分 0

vc里的dll怎么写的?不是所有的都可以在vb里掉Top

6 楼why_wxb2002(bobo)回复于 2001-12-28 10:12:52 得分 10

VC动态库里函数定义成如下形式:  
  extern   "C"  
  long   EXPORT   _stdcall   funName(int   i,LPSTR   str);  
  然后在VB中声明一下就可以了.Top

7 楼darknessun(darkness)回复于 2001-12-28 10:13:10 得分 0

你的动态库是自己写的还是别人给的?  
  方便的话,把vb程序和动态库发给我,我帮你看看吧。  
  darkness.sun@263.netTop

8 楼langjingling(蓝金灵)回复于 2001-12-28 10:14:27 得分 0

to   darknessun(darkness)  
  声明是这么写的,不过我没有加入.def文件,难道一定要在DLL中加入.def文件吗?Top

9 楼langjingling(蓝金灵)回复于 2001-12-28 10:16:31 得分 0

to   darknessun(darkness)  
  动态链接库是自己写的  
  #include   "stdafx.h"  
   
  BOOL   APIENTRY   DllMain(   HANDLE   hModule,    
                                                DWORD     ul_reason_for_call,    
                                                LPVOID   lpReserved  
    )  
  {  
   
          switch(ul_reason_for_call)  
          {  
          case   DLL_PROCESS_ATTACH:  
                          {  
                                          break;  
                          }  
          case   DLL_PROCESS_DETACH:  
                          {  
                                          break;  
                          }  
          }         return   TRUE;  
  }  
  extern   "C"     __declspec(dllexport)   int       Add(int   a,int   b)  
  {  
  return   (a+b);  
  }  
   
  这就是程序的主要部分了Top

10 楼why_wxb2002(bobo)回复于 2001-12-28 10:17:40 得分 0

当然要有.def文件,否则VB找不到接口.Top

11 楼langjingling(蓝金灵)回复于 2001-12-28 10:17:50 得分 0

to   :why_wxb2002(bobo)   
  LPSTR是MFC中的类别吧,如果在VB中用不一定行的Top

12 楼langjingling(蓝金灵)回复于 2001-12-28 10:18:28 得分 0

to   :why_wxb2002(bobo)   
  我来试一下,我就是讨厌.def文件,才不用它的Top

13 楼darknessun(darkness)回复于 2001-12-28 10:18:58 得分 0

你可以用depends看看你动态库的对外接口,可能并不是你以为的呦。  
  因为考虑到多态性,所以为了保险起见,还是写个.def文件来规范其对外接口。  
  Top

14 楼why_wxb2002(bobo)回复于 2001-12-28 10:19:29 得分 0

extern   "C"     __declspec(dllexport)   int     Add(int   a,int   b)  
  给VB用时要声明为_stdcall   Top

15 楼why_wxb2002(bobo)回复于 2001-12-28 10:20:51 得分 0

LPSTR是为了于VB中的String型对应Top

16 楼darknessun(darkness)回复于 2001-12-28 10:21:01 得分 0

.def很容易写呀  
  你只要在你的工程里加个.def的文件  
  然后写上:  
   
  EXPORTS  
      Add  
   
  就可以了。:)  
  Top

17 楼langjingling(蓝金灵)回复于 2001-12-28 10:21:19 得分 0

to   :why_wxb2002(bobo)   
   
  添加了.def文件还是出现那个提示Top

18 楼darknessun(darkness)回复于 2001-12-28 10:23:12 得分 0

To   :why_wxb2002(bobo)  
  extern   "C"     __declspec(dllexport)   int     Add(int   a,int   b)  
  给VB用时要声明为_stdcall      
   
  yes.应该写:  
   
  extern   "C"   __declspec(dllexport)   int   _stdcall   Add(int   a,int   b)  
  Top

19 楼langjingling(蓝金灵)回复于 2001-12-28 10:23:22 得分 0

to   :darknessun(darkness)  
  depends怎么用法?  
  to   :why_wxb2002(bobo)  
  如果要改成_stdcall,怎么个改法Top

20 楼langjingling(蓝金灵)回复于 2001-12-28 10:27:06 得分 0

to   :darknessun(darkness)  
  extern   "C"   __declspec(dllexport)   int   _stdcall   Add(int   a,int   b),这里面的内容是不是一个都不能少Top

21 楼mfc42d()回复于 2001-12-28 10:28:42 得分 10

老大,这样该  
    vc   的dll  
  int   WINAPI   DialConnect()  
  {  
        MessageBox(NULL,"99","00",MB_OK);  
  return   0;  
  }  
  vc的.def  
  ;   vctest.def   :   Declares   the   module   parameters   for   the   DLL.  
   
  LIBRARY             "vctest"  
  DESCRIPTION     'vctest   Windows   Dynamic   Link   Library'  
   
  EXPORTS  
          ;   Explicit   exports   can   go   here  
            DialConnect  
  vb的模块  
  Attribute   VB_Name   =   "Module1"  
  Public   Declare   Function   DialConnect   Lib   "VCtest.dll"   ()   As   Long  
  vb的调用  
    DialConnect  
  Top

22 楼darknessun(darkness)回复于 2001-12-28 10:31:16 得分 0

depends在visual   studio的tool里,从开始菜单的VS里找。:)  
  Top

23 楼why_wxb2002(bobo)回复于 2001-12-28 10:33:12 得分 0

  写成:  
  extern   "C"     int   EXPORT   _stdcall   Add(int   a,int   b)Top

24 楼langjingling(蓝金灵)回复于 2001-12-28 10:35:00 得分 0

to   :darknessun(darkness)   
  我打开以后,里面的内容很乱,都不知道该怎么看,能否给个提示?Top

25 楼darknessun(darkness)回复于 2001-12-28 10:35:25 得分 0

to   why_wxb2002  
  这个EXPORT放int前int后应该没关系啊。  
  Top

26 楼langjingling(蓝金灵)回复于 2001-12-28 10:36:30 得分 0

to   :mfc42d()  
  怎么在VB中调用函数,打空格没有提示,一定要先输入括号才有参数提示?Top

27 楼darknessun(darkness)回复于 2001-12-28 10:37:25 得分 0

你打开你的动态库,然后在右边下方栏中显示了该动态库可供外部调用的函数名,入口等。  
  你看看函数名是不是叫Add?  
  Top

28 楼langjingling(蓝金灵)回复于 2001-12-28 10:39:35 得分 0

放在INT前有错误提示  
  error   C2146:   syntax   error   :   missing   ';'   before   identifier   'Add'Top

29 楼langjingling(蓝金灵)回复于 2001-12-28 10:40:58 得分 0

是了,是有一个叫Add的内容Top

30 楼langjingling(蓝金灵)回复于 2001-12-28 10:41:50 得分 0

如果有这个提示,是不是就说明该DLL就没问题了?Top

31 楼darknessun(darkness)回复于 2001-12-28 10:44:08 得分 0

是。  
  Top

32 楼langjingling(蓝金灵)回复于 2001-12-28 10:49:15 得分 0

那怎么知道里面的参数是什么?Top

33 楼darknessun(darkness)回复于 2001-12-28 10:50:07 得分 0

啊?我从来都是放在前面的。//think  
  Top

34 楼langjingling(蓝金灵)回复于 2001-12-28 11:16:24 得分 0

是不是还要包含其他头文件?Top

35 楼fhawk(大头鹰)回复于 2001-12-28 11:23:27 得分 0

你要注意变量转换的规则,比如int应该转为Long,而不是IntegerTop

36 楼langjingling(蓝金灵)回复于 2001-12-28 12:48:03 得分 0

好了,开始散分了Top

37 楼seashoreking(allen)回复于 2001-12-28 15:30:07 得分 0

you   can   get   it   from   anywhere.Top

38 楼double2(double2)回复于 2001-12-28 16:01:35 得分 0

软件名称:A-Post          
  最新版本:0.9Beta          
  软件性质:互联网工具  
  使用平台:win9x   win2000   winXP   winNT  
  发布公司:A-Soft.net  
  下载网址:http://www12.big.or.jp/~itsu/A-Post/A-Post_demo.exe     
  软件简介:  
  A-POST是设计来让使用者可一次同时发布到成千上万个留言版的超强发言工具。  
  网路上留言板、贴图区、论坛数量这么多,有时想多到几个留言板发言,得花上大把时间一站一站的去访问,这时候,您是不是希望能够有一个将发言一次就发送到所有论坛的工具呢?  
  现在,只需几个简单的步骤,A-POST自动帮您发送到您想发送的留言板列表,您还可依个人喜好编辑多组个人信息,自由自在改变每次的留言者名称、e-mail等个人资讯,除此之外,还有强大的共享网址数据厍外,您还可自行添加、管理留言板网址,支持定时自动发送功能。  
  这正是您理想中的工具,不论是交友讨论、贴图分享、专业网站宣传、发布新闻讯息、、、等,A-POST让您“一次搞定”!  
   
   
  --------------------------------------------------------------------------------  
  Top

39 楼skt985(傻问天)回复于 2002-01-11 14:18:51 得分 0

41554关注!   :)Top

相关问题

  • vb调用vc++的dll
  • vc调用vb的dll
  • VC中调用VB生成的DLL(java调用VB的DLL)
  • vb调用vc的DLL问题
  • 如何在vb中调用vc的DLL
  • vb如何调用vc做的dll???
  • VB里怎样调用VC的DLL?
  • 还是VB调用VC的DLL问题
  • VB调用VC编写的DLL
  • vc中怎样调用vb写的dll

关键词

  • .net
  • vb
  • 函数
  • 动态库
  • dll
  • 文件
  • 接口
  • vc
  • 调用
  • wxb2002

得分解答快速导航

  • 帖主:langjingling
  • darknessun
  • why_wxb2002
  • mfc42d

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo