我正在使用Delphi XE4创建一个Voip程序。我正在使用过时的VOIP SDK来自名为BigSpeed的公司,它不再是当前代码,指向以下路径'C:\ Program Files(x86)\ BigSpeed Voice SDK \',其中存储了活动的x控件。
LIBID_bsVoiChatCln: TGUID = '{D2A88515-99E0-4EEE-A030-E5D2AB306A03}';
IID_IbsVoiChatClnX: TGUID = '{5055A626-56A1-4E58-A461-000A69CA3E03}';
DIID_IbsVoiChatClnXEvents: TGUID = '{665DB561-22D3-4624-B55B-4416309A2E03}';
CLASS_bsVoiChatClnX: TGUID = '{BE761C1E-1F6C-46F8-A99B-0AB29C9B2D03}';
如何创建新的GUID并让程序从新目录访问活动的x控件。
答案 0 :(得分:3)
您不想创建新的GUID。 GUID是该组件的标识符。就问题和您的意见而言,您所要做的就是在不同的位置注册DLL。
ActiveX DLL几乎肯定使用自注册。这意味着您可以将DLL放在其他位置并在那里注册。例如,假设DLL位于:
C:\MyFolder\MyDll.dll
然后你可以通过执行这个命令注册它:
regsvr32 C:\MyFolder\MyDll.dll
答案 1 :(得分:2)
您似乎不理解(或不解释)您的程序,库和GUID之间的关系。
如何创建新的GUID和
1)GUID只是一个128位的随机数。因此,您只需编辑其十六进制字符串即可“创建新的GUID”。或者你可以在设计时在Delphi源代码编辑器中按Ctrl + Shift + G.在运行时,您可以使用CreateGUID
单位的SysUtils
函数。
但我不认为创建新的GUID会对你有所帮助。如果有的话,它应该意味着显式声明与旧的GUID不兼容(因此与VOIP库不兼容)
来自新目录。
2)为什么您认为您的VoIP库被安排为一组ActiveX控件?只是因为那里有GUID?内部没有GUID的任何文本文件都不是ActiveX。
ActiveX是专门安排的Windows服务器,它们在注册表中注册,以便任何程序都可以调用它们。如果安装程序失败,有时您可以在事后注册它们。
所以你应该阅读你的库的手册,无论它们是否构成ActiveX,如果是,那么如何在Windows中注册它们(应该由库安装程序完成)
如果安装程序没有提供,那么您无法确定该库是否可以在其他位置工作。不仅你的程序需要连接它,而且库本身可能需要连接到其他部分。
让程序访问活动的x控件
3)如果你的库真的符合ActiveX规范,并且它已经正确安装(注册),那么你可以将它们导入Delphi IDE并将它们放到表格中,就像删除表格和对话框一样。
4)如果您不想将VoIP组件丢弃到表单上,则可以尝试使用CoCreateInstance
在运行时创建它。但首先你必须为初学者阅读一些关于Microsoft COM的教程。您可能会错过一些高级概念,但您应该了解最基本的内容,例如接口如何与类相似和不同,如何管理它们的生命周期,如何为程序初始化和最终确定COM运行时等等。
5)您也可以尝试绕过正确的Windows查找和加载服务器的方法,并尝试在适当的DLL中使用DllGetClassObject
例程自己完成。如果库是允许的,它将工作。但是,如果它确实依赖于Windows提供的服务,这些服务可能会导致各种崩溃和未满足的期望。
如果我的记忆为我服务,你可以在早期的HTML帮助单元中找到这种方法的例子。 Microsoft HTML帮助使用CoCreateInstance和运行时ActiveX服务器注册表提供late binding
,或者将early binding
提供给htmlhlp.ocx
视为DLL。早期版本的HTML帮助API for Delphi提供了这两个选项。但我可能在这里错了。