各位大虾,我用VC写了一个DLL文件,里面有一个add函数,在调用的时候VB提示说找不到add在DLL文件中的入口点,请问这是怎么回事!

解决方案 »

  1.   

    两个情况:
    1. ActiveX DLL:
         regsvr32 cfile.dll
         在VB中project->reference
         然后创建对象,并调用其方法2. 普通动态连接库
         这就需要申明函数了,可以参考其它API申明的方式来做。
         private declare function add lib "cfile" alias "add" (byval a as integer,byval b as integer) as integer
      

  2.   

    我就是这样子声明的,可是仍然提示找不到入口点,是不是DLL程序在编写的时候有什么要求?
      

  3.   

    在VC里,函数名登记到.def文件里了没有?注意不是__declspec(dllexport)这个。.def文件里一定要有:EXPORTS    add   @1
      

  4.   

    自己定义也可以。或者你用VC工程向导的“MFC AppWizard(dll)”->“Regular Dll with shared MFC”也就是第二项,这个就为你生成了.def。用MFC的DLL要有MFC支持哦~设计接口参数时,可 别 来个“... Func(CWordArray &a)”这样的东东……
      

  5.   

    主要是接口问题,我举个最简单的倒子给你:
    一、在VC中建一个动态连接库工程取名XX,不要MFC支持
    二、建一个C/C++文件,如XX.C,内容如下:
    SHORT SumTwo(SHORT a,SHORT b)
    {
       return a+b;
    }
    三、建一个DEF文件,如XX.DEF,内容如下:
    EXPORTS
       SumTwo
    四、将这两个文件都加入当前工程XX
    五、将当前工程编译成XX.DLL
    六、用VB来调用SumTwo这个函数,建新VB工程
    七、在默认的FORM上加上一个按钮Command1
    八、在Command1的OnClick中加入
        MsgBox SumTwo(3,4)        '显示3+4的值
    九、将前面生成的XX.DLL复制到VB工程所在目录
    十、在这个文件的最前面声明SumTwo这个函数
        Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer
    十一、运行这个VB程,点击Command1按钮,你将得到3+4的和7
    十二、关于第(十)步函数的声明请参看MSDN中的相关资料,
          主要是参数和返回值的数据类型不能弄错。
      

  6.   

    犯了点小错,纠正一下:
    Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer
    这一行因为是我手工写的,所以,呵呵写成下面这样子吧:
    Private Declare Function SumTwo Lib "XX.DLL" alias "SumTwo" (ByVal a As Integer,ByVal b As Integer) As Integer
    如果你的程序用的是C++代码,那么第(二)项的文件名就应该用.CPP
      

  7.   

    各位大虾,还有个小问题,我的函数是这样写的
    int showx(int x)
    {
       return x;
    }
    也按照你们上面给的方法声明了,def文件中也加了,可是调用的时候写成 showx(4),却报告我调用DLL约定错误,这怎么解决啊?我知道是参数类型的问题,可是这样子写参数类型还能不匹配?
      

  8.   

    在VC中生成的DLL只有是扩展的DLL才能被其它语言调用,所以你在VC中生成的DLL可能不是扩展的,因此约定出错的,你把你VC的DLL改成扩展的就可以了。