2014-02-17 79 views
0

我有一些关于C++的初学者问题。 我已经下载了Windows SDK,并根据文档,所有蓝牙流量使用winsock。如果我想编程蓝牙接口,Windows SDK包含头文件(.h)。反向头文件/链接

a)这是一个普通的C++问题:头文件winsock.h如何链接到特定的dll?我没有指定任何链接。如何检测与此标头链接的所有.dll文件? 是不是头文件假设只包含函数的名称和dll中的实际实现?我有点困惑。

我的第二个目标是用修改后的版本替换windows winsock函数。我想保留原有的功能,除非由其他应用程序设置的某个标志设置为true。在这种情况下,我想修改一些功能。 我的方法是创建一个新的DLL,它将具有相同的函数名称,如头文件winsock.h中所示。

b)假设在原始的winsock中存在函数fff。我将用一个新函数替换它,除非该标志为真,否则调用相同的函数fff,但在未修改的dll中,也就是说,我希望在这种情况下从未修改的dll“包含”原始函数和“过载”我修改过的fff函数,具有原始的fff函数。这两个函数具有相同的参数和相同的名称。我怎么样?有更好的方法来实现相同的目标吗?

c)允许应用程序设置的标志在dll中可访问的最佳方式(或简单方法)是什么?

d)Winsocket是一个非常重要的组件。如果我为其中的每个函数添加一个命令,我是否应该预期性能会大幅下降?

谢谢!

回答

0

a)头文件简单地定义了要在别处找到的东西(类型,函数,类) - 它没有指定位置。当您链接程序时,您将包含(除其他外)连接的.lib文件包含到正确的DLL中。当程序运行时,lib代码会将DLL加载到内存中并连接到它。

b)生成第二个DLL,其中包含与winsock中所有相同的函数,但在函数名称的开头添加了(比如说)ELI_。然后在ELI_函数内查看标志,如果没有设置,调用基本的winsock函数,否则做任何你想到的特殊事情。

c)使该标志变量您ELI_ DLL的代码中的全局静态变量,然后添加额外的功能,以设置标志(和回读其状态,可能)

d)我不知道,但一个人如果不花很多时间。我会更担心你的特殊代码的作用。

+0

不同意a)。在MS(和兼容)编译器中,有一些用于定义使用哪个库的编译指示。例如。 '#pragma comment(lib,“foo.lib”)'可以被添加到头文件中。 –

+0

@Mats我明白你的观点 - 编译指示允许.h指定库文件 - 但是我觉得它并没有改变我试图对什么头文件和.lib文件(通常)做的基本点。 –

+0

是的,我明白你在说什么,通常它适用。但是,特别是MS有向这些头文件添加这些编译指示的倾向。对于某些人来说,这可能会让人感到困惑,因为“它自动地起作用”,然后在另一个平台上,“你需要做一些事情来使图书馆工作”> –