我想在VC中创建一个dll,然后在VB中调用它。
这个dll中包含的有一个对话框,还有一些控件,其中包含一个MSComm的ActiveX对象,并且需要对该控件的一些消息进行处理。
请问可以实现吗?
我的操作系统是Windows XP,VC是6.0版本的。
那位高手可以给我说得详细点,我VC刚学不太久。

解决方案 »

  1.   

    VC写DLL的方法很简单,只要在*.cpp中写如自己的函数
    //mydll.cpp
    ...
    ...
    ...
    //系统生成的代码的最后
    int __stdcall myfun()
    {
        return 1;
    }在DEF文件中导出函数
    //mydll.def
    ...
    ...
    ...
    //系统生成的代码的最后
    myfun       @ 1vb调用的方法:把LIB和DLL放在跟目录下,声明调用就可以了
      

  2.   

    用到对话框需要
    AFX_MANAGE_STATE(AfxGetStaticModuleState());   //2.4 VB 调用32 位动态库方法
    16 位DLL 调用方法与32 位DLL 调用方法类同。
    语法:
    [Public | Private] Declare Fun Function name Lib "libname" [Alias "aliasname"]
    ction [([arglist])] [As type]
    Declare 语句的语法包含下面部分:
    Public 可选的。用于声明对所有模块中的所有其它过程都可以使用的函数。
    Private 可选的。用于声明只能在包含该声明的模块中使用的函数。
    name 必需的。任何合法的函数名。动态链接库的入口处(entry points)区分大小写。
    libname 必需的。包含所声明的函数动态链接库名或代码资源名。
    Alias 可选的。表示将被调用的函数在动态链接库(DLL) 中还有另外的名称。当外部函数名与某个函数重名时,就可以使用这个参数。当动态链接库的函数与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用Alias。如果该动态链接库函数中的某个字符不符合动态链接库的命名约定时,也可以使用Alias。
    aliasname 可选的。动态链接库。如果首字符不是数字符号(#),则aliasname 是动态链接库中该函数的入口处的名称。如果首字符是(#),则随后的字符必须指定该函数的入口处的顺序号。
    arglist 可选的。代表调用该函数时需要传递的参数的变量表。
    type可选的。Function 返回值的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)或Variant,用户定义类型,或对象类型。
    arglist 参数的语法以及语法各个部分如下:
    [Optional] [ByVal | ByRe ByRef] [ParamArray] varname[( )] [As type] 部分描述:
    Optional可选的。表示参数不是必需的。如果使用该选项,则arglist 中的后续参数都必需是可选的,而且必须都使用Optional 关键字声明。如果使用了ParamArray,则任何参数都不能使用Optional。
    ByVal 可选的。表示该参数按值传递。
    ByRef 表示该参数按地址传递。
    ParamArray 可选的。只用于arglist 的最后一个参数,表示最后的参数是一个
    Variant 元素的Optional 的数组。使用ParamArray 关键字可以提供任意数目的参数。
    ParamArray 关键字不能与ByVal、ByRef 或Optional 一起使用。
    varname 必需的。代表传给该函数的参数的变量名;遵循标准的变量命名约定。
    ( ) 对数组变量是必需的。指明varname 是一个数组。
    type可选的。传递给函数的参数的数据类型;可以是除Decimal 以外的任何类型。
    说明:
    Function 的数据类型决定其返回值的数据类型。可以在arglist 之后使用As 子句来指定函数返回值的数据类型。在arglist 中,可以使用As 子句来指定任何传给该函数的参数的数据类型。不单可以指定为任何标准数据类型,还可以在arglist 中指定As Any 来禁止类型检查,从而允许将任意数据类型传递给该函数。空圆括号表示该Function 没有参数,且Visual Basic 应确保不会传递任何参数。
      

  3.   

    不对啊,提示没有找到文件(**.lib)
      

  4.   

    to Zhang865
    谢谢你告诉我的方法。
    但是,int __stdcall myfun() 中__stdcall起什么作用?我没加好像也正确。
    myfun @ 1 中 @ 1 起什么作用?我没加好像也正确。
    我做了一个简单的只显示对话框的dll,编译通过,没有错误信息。我用VC做了一个测试程序,采用鼠标单击产生消息命令的方法调用该dll,可以正常显示dll中的对话框。
    (1)然而,在菜单命令中调用该dll却出错,提示警告信息,忽略该警告信息后,还是可以显示对话框。这是为什么呢?
    (2)但当我向dll中的对话框中加入了一个ActiveX控件后,编译通过,没有错误信息。但在测试程序中调用,却什么也不显示,甚至没有错误或警告信息,删除该ActiveX控件后,又可以显示对话框了,这是为什么呢?