2011-03-20 70 views
0

我有一个dll至极DLL使用我想在c程序使用,在C源代码

  • 你认为是有效的有一个DLL(很多常用功能),然后创建一个最终会使用它们的程序,或者拥有所有的源代码。

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

回答

3

你认为是有效的有一个DLL(很多常用功能),然后创建一个程序,最终将使用它们,或者有所有源代码。

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

共享库可能比静态链接代码稍慢;然而,这可能是非常小的,而共享库带来了许多好处,使得它更有价值(例如动态加载和处理符号的能力,这允许插件式体系结构)。也就是说,也有一些缺点(如果你不小心你的DLL的存在位置,它们是如何版本化的以及谁可以更新它们,那么你可以进入DLL hell)。

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

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

0

你可以把你的功能集成到其中任何一个在编译时合并到您的应用程序,是基本相同,把.c文件在项目中的静态库(.LIB一)。

或者你可以在运行时使用包含函数的dll。 dll的优点是两个使用相同函数的程序可以使用相同的dll(节省磁盘空间),并且可以在不更改程序的情况下升级dll - 这些对您而言可能都不重要。

程序的运行没有什么特别的,你需要做的,包括它的时候DLL被自动加载(你可以加载一个dll特别是在你的代码 - 有时有特殊原因要做到这一点)

编辑 - 如果你需要创建一个存根lib中现有的DLL看到http://support.microsoft.com/kb/131313

+0

你会如何从c代码中调用它? – cMinor 2011-03-20 04:25:19

+0

现在我正在使用dev shed c/C++,你知道一个示例代码吗? – cMinor 2011-03-20 04:26:24

+0

@darkcminor,你可以像通常那样称呼它。您在声明中包含“.h”文件,然后您只需使用该函数。您需要更改项目配置以链接到DLL。 – 2011-03-20 04:27:07