我想在c
程序中使用它,
你认为拥有一个dll(许多常用功能)然后创建一个最终会使用它们的程序,或拥有所有源代码是否有效。
要包含dll,必须遵循什么语法?
答案 0 :(得分:3)
你认为拥有一个dll(许多常用函数)然后创建一个最终将使用它们的程序,或拥有所有源代码是有效的。
对于内存和磁盘空间,使用共享库(DLL是共享库的Windows实现)更有效,假设至少有两个程序使用此组件。如果只有一个程序将使用此组件,则不会节省内存或磁盘空间。
共享库可能比静态链接代码稍慢;然而,这可能是非常小的,共享库带来了许多好处,使其更有价值(例如动态加载和处理符号的能力,这允许类似插件的架构)。也就是说,还有一些缺点(如果你不小心你的DLL存在的地方,它们的版本,以及谁可以更新它们,那么你可以进入DLL hell)。
要包含dll,必须遵循什么语法?
这取决于。有两种方法可以使用共享库。在第一种方式中,您告诉链接器引用共享库,并且共享库将在程序启动时自动加载,您基本上会像正常一样引用代码(包括各种头文件,只需使用符号的名称)你想引用它)。第二种方法是动态加载共享库(在Windows上,这是通过LoadLibrary完成的,而在UNIX上使用dlopen完成)。第二种方法使得可以根据共享库中符号的存在或不存在来改变程序的行为,并检查可用的符号集。对于第二种方式,您将使用GetProcAddress(Windows)或dlsym(UNIX)来获取指向库中定义的函数的指针,并且您将传递函数指针以引用函数加载。
答案 1 :(得分:0)
您可以将函数放入静态库(.lib)中,该库在编译时合并到您的应用程序中,与将.c文件放在项目中基本相同。
或者你可以使用运行时包含这些功能的dll。一个DLL的优点是两个使用相同功能的程序可以使用相同的dll(节省磁盘空间),你可以在不改变程序的情况下升级dll - 这些都不适合你。
当你的程序运行时会自动加载dll你需要做什么来包含它(你可以在你的代码中专门加载一个dll - 有时候有特殊的理由这样做)
编辑 - 如果您需要为现有dll创建存根lib,请参阅http://support.microsoft.com/kb/131313