c - 在c源代码中使用dll的效率

标签 c dll

我有一个 dll,我想在 c 程序中使用,

  • 您认为拥有一个 dll(许多常用功能)然后创建一个最终将使用它们的程序或拥有所有源代码是否有效?

  • 要包含 dll,必须遵循什么语法?

最佳答案

Do you think is efficient to have a dll (lots of common functions) and then create a program that will eventually use them,or have all the source code.

对于内存和磁盘空间,使用共享库(DLL是共享库的Windows实现)的效率更高,假设至少有两个程序使用这个组件。如果只有一个程序会使用该组件,那么就不会节省内存或磁盘空间。

共享库可能比静态链接代码稍慢;然而,这可能是微不足道的,而且共享库具有许多使其物有所值的好处(例如动态加载和处理符号的能力,这允许类似插件的体系结构)。也就是说,也有一些缺点(如果您不注意 DLL 的位置、版本控制方式以及谁可以更新它们,那么您可以进入 DLL hell)。

To include the dll, What syntax must be followed?

这取决于。有两种方式可以使用共享库。第一种方式,你告诉链接器引用共享库,共享库会在程序启动时自动加载,你基本上会像正常一样引用代码(包括各种头文件,只是使用符号的名称)你想引用它)。第二种方法是动态加载共享库(在 Windows 上这是通过 LoadLibrary 完成的,而在 UNIX 上是通过 dlopen 完成的)。第二种方式可以根据共享库中符号的存在或不存在来更改程序的行为,并检查可用的符号集。对于第二种方式,您将使用 GetProcAddress (Windows) 或 dlsym (UNIX) 获取指向库中定义的函数的指针,您将传递函数指针以引用加载的函数。

关于c - 在c源代码中使用dll的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5366718/

相关文章:

c - 为什么2个输出不同?

c# - 在 Windows Phone 8.1 模块 System.dll 中找不到类型 System.ComponentModel.TypeConverter

visual-studio-2008 - 如何从崩溃的混合模式 exe/dll 中获取完整的堆栈跟踪?

c++ - 从内存中加载动态库

c# - 在 Excel 之外运行 XLL?

使用指针将浮点矩阵复制并转换为 double 矩阵

c - 为什么当我在 "else"语句后添加 "if"时,代码无法正常运行?

c - 使用#defined函数名称作为dlsym的输入

delphi - Delphi 中的异常和 DLL

c - 查找以数组中的字符开头的单词