麻烦看一下
http://expert.csdn.net/Expert/topic/2086/2086800.xml?temp=.692135
的问题,不胜感激。

解决方案 »

  1.   

    如果是标准的动态联接库vb声明语句
    Public/Private Declare Function YourFun Lib "YourDll" Alias "YourFunAlias" (...) As ...Dll目录放在exe目录/系统目录
      

  2.   

    1.请问使用VC(下的AppWizard)能够编写其它语言(如VB)下可以使用的Dll嘛?如果可以应当怎样操作?有哪些限制?
    2.如果是在VC下面使用Dll,应当怎样操作?比如要添加什么或者设定什么?回答:1.VC编写的WIN32 DLL可以被其它语言调用.MFC DLL只能被使用了MFC的程序调用.
    怎样操作,看一下这个例子程序:
    VB调用VC编写的DLL例子 
    http://www.copathway.com/ASP/ibr_upload/140.zip
    这方面的资料很多,CSDN可以搜出很多.我就不多说了.最主要的是参数类型匹配问题.2.看看
    http://www.vckbase.com/code/downcode.asp?id=1952,该代码包含了DLL源代码,与调用DLL的程序源代码。
      

  3.   

    十分感谢两位,特别是第二位朋友的耐心帮助。
    我还有几个问题。
    .def文件是个怎样的角色?是不是必须手动编辑?我在一处看到像这种声明函数的方式:
    int _declspec(dllexport) StatusGE()
    据说使用 _declspec 关键字可以省去编写.def文件一步,可是我试的时候却不行(我是在VB6中调用Dll)。_declspec 和 dllexport 是什么意思?还有关于 extern "C" 是不是和现在讨论的问题也有很密切的关系?它的作用又是什么?
    如果觉得上面的问题太过繁琐,两位可否推荐一些与这方面有关的、讲的比较详细的书?我参考过《Visual C++ 6 技术内幕》(《Inside Visual C++》)可是觉得不够详细。
    最后不知可否留给我一个联系方式,email、qq、icq都好,希望能与你们做朋友。
      

  4.   

    为确定用于导出函数的方法(.DEF 文件或 __declspec(dllexport) 关键字),请回答下列问题: 是否要一直添加附加的导出函数? 
    谁要使用 DLL?例如,第三方 DLL 是否由许多无法重新生成的可执行文件使用,或者此 DLL 仅由可以轻松重新生成的应用程序使用? 
    使用 .DEF 文件的优缺点
    在 .DEF 文件中导出函数使您得以控制导出序号。当将附加的导出函数添加到 DLL 时,可以给它们分配更高的序号值(高于任何其他导出函数)。当您进行此操作时,使用隐式链接的应用程序不必与包含新函数的新导入库重新链接。这非常重要,例如,在设计将由许多应用程序使用的第三方 DLL 时。可以通过添加附加的功能不断地增强 DLL,同时确保现有应用程序继续正常使用新的 DLL。MFC DLL 是用 .DEF 文件生成的。使用 .DEF 文件的另一个优点是:可以使用 NONAME 属性导出函数,该属性仅将序号放到 DLL 的导出表中。对具有大量导出函数的 DLL,使用 NONAME 属性可以减小 DLL 文件的大小。有关编写模块定义语句的信息,请参见模块定义语句的规则。有关序号导出的更多信息,请参见按序号而不是按名称从 DLL 导出函数。使用 .DEF 文件的主要缺点是:在 C++ 文件中导出函数时,需要将修饰名放到 .DEF 文件中,或者通过使用外部“C”用标准 C 链接定义导出函数,以避免编译器进行名称修饰。如果需要将修饰名放到 .DEF 文件中,可以通过使用 Dumpbin 工具或通过使用 /MAP 链接器选项来获取修饰名。请注意,编译器产生的修饰名是编译器特定的。如果将 Visual C++ 编译器产生的修饰名放到 .DEF 文件中,则链接到 DLL 的应用程序必须也是用相同版本的 Visual C++ 生成的,这样调用应用程序中的修饰名才能与 DLL 的 .DEF 文件中的导出名相匹配。使用 __declspec(dllexport) 的优缺点
    使用 __declspec(dllexport) 非常方便,因为不需要考虑维护 .DEF 文件和获取导出函数的修饰名。但是,无法控制编译器生成的导出序号。此方法适合某些情况,例如,在设计要与控制的应用程序一起使用的 DLL 时;如果用新导出重新生成 DLL,则还需要重新生成应用程序。
      

  5.   

    .def文件是个怎样的角色?是不是必须手动编辑?我在一处看到像这种声明函数的方式:
    int _declspec(dllexport) StatusGE()
    据说使用 _declspec 关键字可以省去编写.def文件一步,可是我试的时候却不行(我是在VB6中调用Dll)。_declspec 和 dllexport 是什么意思?还有关于 extern "C" 是不是和现在讨论的问题也有很密切的关系?它的作用又是什么?
    回答:从DLL中导出函数有两种方法:
    1.在创建DLL时使用模块定义,就是.def文件的方法.
    2.在定义函数时使用关键字__declspec(dllexport)extern "C"是为了使C语言编写的程序也能够也能够访问该导出函数
    举一个使用.def文件的简单例子
    例如:
    LIBRARY DLLSAMPLE1 //表明该DEF文件属于DLL,DLLSAMPLE1是DLL的名称,这个名称在链接时将放入到DLL的引入库中
    DESCRIPTION "一个使用DEF文件的DLL的简单例子"//DESCRIPTION语句不是必须有的,它的作用是对该DLL做简短说明
    EXPORTS  //EXPORTS语句下列出了DLL所有导出函数,及其顺序值 @ 跟个1表示是第一个函数,这个值必须不小于,且不大于DLL所有导出函数的数目.
    DLLSample1 @1 //函数列表..._declspec有_declspec(dllexport)和_declspec(dllimport)两种形式,前者是编写DLL时候必须加上的关键字,后者是无论是用.DEF文件或者_declspec(dllexport)关键字创建的DLL,均可使用_declspec(dllimport)从DLL中引入函数.也可以省略,但是使用它可以使编译器生成效率更高的代码.
      

  6.   

    十分感谢各位的帮助!!已经取得进展,顺便再问一下WINAPI的用处是什么?
      

  7.   

    我晕
    API是
    应用程序编程接口 (Application Program Interface) 的缩写,这是一组供应用程序使用的命令,用以向计算机的操作系统请求或执行更低级的设备访问操作。Microsoft Visual FoxPro API 包含各种命令,允许 C 或汇编语言例程与 Visual FoxPro 相互操作。