0

我正在使用 Delphi XE4 创建一个 Voip 程序。我正在使用一个过时的 VOIP SDK 来自一家名为 BigSpeed 的公司,该公司不再围绕当前代码点指向存储活动 x 控件的以下路径“C:\Program Files (x86)\BigSpeed Voice SDK\”。

    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 控件。

4

2 回答 2

3

您不想创建新的 GUID。GUID 是该组件的标识符。据我从问题和您的评论中可以看出,您要做的就是在不同的位置注册 DLL。

ActiveX DLL 几乎可以肯定使用自注册。这意味着您可以将 DLL 放在其他地方并在那里注册。例如,假设 DLL 位于:

C:\MyFolder\MyDll.dll

然后您可以通过执行以下命令来注册它:

regsvr32 C:\MyFolder\MyDll.dll
于 2013-11-12T08:06:17.237 回答
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 定位和加载服务器的方法,并尝试自己做,使用DllGetClassObject正确的 DLL 中的例程。如果图书馆是允许的,它将工作。但是,如果它确实依赖于 Windows 提供的服务,那么这些服务可能会导致各种崩溃和未达到的预期。

如果我没记错的话,您可以在 delphi 的早期 HTML 帮助单元中找到该方法的示例。Microsoft HTML 帮助提供了late binding使用 CoCreateInstance 和运行时 ActiveX 服务器注册表,或将early bindinghtmlhlp.ocx视为 DLL。Delphi 的早期版本的 HTML Help API 提供了这两个选项。但我在这里可能错了。

于 2013-11-12T06:36:19.083 回答