我有一些初学者关于c ++的问题。 我已经下载了Windows SDK,根据文档,所有蓝牙流量都使用winsock。如果我想编写蓝牙接口,Windows SDK包含头文件(.h)。
a)这是一个常见的c ++问题:头文件winsock.h如何链接到特定的dll?我没有指定任何链接。如何检测与此标头链接的所有.dll? 是不是头文件假设只包含函数的名称和dll中的实际实现?我有点困惑。
我的第二个目标是用修改后的版本替换windows winsock函数。我想保留原始功能,除非由不同应用程序设置的某些标志设置为true。在这种情况下,我想修改一些功能。 我的方法是创建一个新的dll,它将具有相同的函数名,如头文件winsock.h中所示。
b)假设原始winsock中存在函数fff。我将用一个新函数替换它,除非该标志为真,否则在未修改的dll中调用相同的函数fff,即。在这种情况下,我希望从未修改的dll中“包含”原始函数并“重载”我修改了fff函数,用原来的fff函数。这两个函数具有相同的参数和相同的名称。我怎么样?有没有更好的方法来实现同一目标?
c)允许在应用程序中设置的标志在dll中可访问的最佳方式(或简单方法)是什么?
d)Winsocket是一个非常核心的组件。如果我在其中的每个函数中添加一个if命令,我是否应该期望性能大幅下降?
谢谢!
答案 0 :(得分:0)
a)头文件只定义了在别处可以找到的东西(类型,函数,类) - 它没有指定在哪里。当您链接程序时,您包含.lib文件,其中包含(以及其他)与正确的DLL的连接。程序运行时,lib代码会将DLL加载到内存中并连接到它。
b)生成第二个DLL,其中包含与winsock相同的所有功能,但是(例如)ELI_添加到函数名称的开头。然后在ELI_函数内查看标志,如果没有设置,则调用基本的winsock函数,否则请记住你想要做的任何特殊事情。
c)使标志变量成为ELI_ DLL代码中的全局静态变量,然后添加额外的函数来设置标志(并可能回读其状态)
d)我不知道,但是单身如果不会花费很多时间。我会更担心你的特殊代码会做什么。