请教既懂VB6又懂VC6并且对DLL十分熟悉的高手(200分火急) 麻烦看一下http://expert.csdn.net/Expert/topic/2086/2086800.xml?temp=.692135的问题,不胜感激。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是标准的动态联接库vb声明语句Public/Private Declare Function YourFun Lib "YourDll" Alias "YourFunAlias" (...) As ...Dll目录放在exe目录/系统目录 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的程序源代码。 十分感谢两位,特别是第二位朋友的耐心帮助。我还有几个问题。.def文件是个怎样的角色?是不是必须手动编辑?我在一处看到像这种声明函数的方式:int _declspec(dllexport) StatusGE()据说使用 _declspec 关键字可以省去编写.def文件一步,可是我试的时候却不行(我是在VB6中调用Dll)。_declspec 和 dllexport 是什么意思?还有关于 extern "C" 是不是和现在讨论的问题也有很密切的关系?它的作用又是什么?如果觉得上面的问题太过繁琐,两位可否推荐一些与这方面有关的、讲的比较详细的书?我参考过《Visual C++ 6 技术内幕》(《Inside Visual C++》)可是觉得不够详细。最后不知可否留给我一个联系方式,email、qq、icq都好,希望能与你们做朋友。 为确定用于导出函数的方法(.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,则还需要重新生成应用程序。 .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中引入函数.也可以省略,但是使用它可以使编译器生成效率更高的代码. 十分感谢各位的帮助!!已经取得进展,顺便再问一下WINAPI的用处是什么? 我晕API是应用程序编程接口 (Application Program Interface) 的缩写,这是一组供应用程序使用的命令,用以向计算机的操作系统请求或执行更低级的设备访问操作。Microsoft Visual FoxPro API 包含各种命令,允许 C 或汇编语言例程与 Visual FoxPro 相互操作。 誰能幫我把如下VC代碼轉為VB6代碼 查询速度的问题 郁闷中……大家说怎么办? vb中的数据恢复问题 哪位大侠知道MSChart控件如何在折线图上标记数值,请不吝赐教,不胜感激! 大家帮助我看看我的水晶报表是不是还缺少什么东西吖?内有图片,等inginging SQL日志文件太大了如何删除日志 网络版ACCESS 怎么通过vb选择声道以及在指定的声道下播发声音文件? 急急急!关于程序焦点和窗体焦点的问题??? 谁有最新版的<<程序员考试试题分类精解>>的配套光盘? 如何在ASP中创建一个对象打开PDF文件,高版本的IE打不开PDF
Public/Private Declare Function YourFun Lib "YourDll" Alias "YourFunAlias" (...) As ...Dll目录放在exe目录/系统目录
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的程序源代码。
我还有几个问题。
.def文件是个怎样的角色?是不是必须手动编辑?我在一处看到像这种声明函数的方式:
int _declspec(dllexport) StatusGE()
据说使用 _declspec 关键字可以省去编写.def文件一步,可是我试的时候却不行(我是在VB6中调用Dll)。_declspec 和 dllexport 是什么意思?还有关于 extern "C" 是不是和现在讨论的问题也有很密切的关系?它的作用又是什么?
如果觉得上面的问题太过繁琐,两位可否推荐一些与这方面有关的、讲的比较详细的书?我参考过《Visual C++ 6 技术内幕》(《Inside Visual C++》)可是觉得不够详细。
最后不知可否留给我一个联系方式,email、qq、icq都好,希望能与你们做朋友。
谁要使用 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,则还需要重新生成应用程序。
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中引入函数.也可以省略,但是使用它可以使编译器生成效率更高的代码.
API是
应用程序编程接口 (Application Program Interface) 的缩写,这是一组供应用程序使用的命令,用以向计算机的操作系统请求或执行更低级的设备访问操作。Microsoft Visual FoxPro API 包含各种命令,允许 C 或汇编语言例程与 Visual FoxPro 相互操作。