并在此先感谢您提供的任何建议/见解/协助。

背景:

我们有一个用于Windows的用Delphi(XE3)编写的软件电话应用程序。最近要求通过激活应答按钮和Plantronics无线耳机来接听来电的功能。 MSI文件已下载并执行,并且Plantronics SDK已转换/更改为Delphi库文件。

然后,我开始关注Plantronics网站的“第一步”部分。我知道必须调整“第一步”代码以适合Delphi系统。

问题:

在调整代码以使其在Delphi中工作时,遇到并解决了一些翻译问题。事实证明,这样的错误很顽固-创建一个特定类的实例时,将引发错误“未注册的类”。

“第一步”代码供参考-

//  Connect to the Plantronics COM API:
myAppName = "SDK .NET COM sample";
sessionManager = new COMSessionManager();
sessionManager.Register(myAppName, out session);

// Hook to SessionManager events:
sessionManagerEvents = sessionManager as ICOMSessionManagerEvents_Event;
if (sessionManagerEvents != null)
{
    sessionManagerEvents.onCallStateChanged += SessionManagerEvents_onCallStateChanged;
    sessionManagerEvents.onDeviceStateChanged += SessionManagerEvents_onDeviceStateChanged;
}


德尔福代码:

//Connect to the Plantronics COM API:
plugin_name: "Plugin Name";
the_session: CoCOMSession.Create;
session_manager = new COMSessionManager.Create;
session_manager.Register(plugin_name, the_session);

//Hook to Session Manager Events
state_device_event_args := CoCOMStateDeviceEventArgs.Create;
call_event_args := CoCOMCallEventArgs.Create;


Delphi代码的最后一行是问题。其他三个“创建”呼叫顺利进行。行“ call_event_args:= CoCOMCallEventArgs.Create;”即使在库文件中声明并实现了该错误,也会引发错误“未注册的类”,以及其他三个错误。

库文件摘录:

类声明:

IID_ICOMStateDeviceEventArgs: TGUID = '{91542BEE-4931-4620-9E96-23AE4001E93F}';
CLASS_COMStateDeviceEventArgs: TGUID = '{335D08FD-8BB5-4EF5-964B-E8A8C010530F}';

IID_ICOMCallEventArgs: TGUID = '{0280956C-C644-4CD8-B124-C8A99E5D505E}';
CLASS_COMCallEventArgs: TGUID = '{705129C3-2265-4F10-9768-0FF8A20234C0}';


类创建功能:

//Works
class function CoCOMStateDeviceEventArgs.Create: ICOMStateDeviceEventArgs;
begin
    Result := CreateComObject(CLASS_COMStateDeviceEventArgs) as ICOMStateDeviceEventArgs;
end;

// Doesn't Work
class function CoCOMCallEventArgs.Create: ICOMCallEventArgs;
begin
  Result := CreateComObject(CLASS_COMCallEventArgs) as ICOMCallEventArgs;
end;


关于解决我发现的“ Class Not Registered”错误的每个教程/论坛答案均未解决问题。

有人对我做错了什么建议或见解吗?

谢谢。

最佳答案

以下问题已(可能)解决了该问题-

我从教程/第一步部分中错误地认为,必须先创建一个“ COMCallEventArgs”对象,然后才能使用它。

经过进一步检查,以后会在必要时创建COMCallEventArgs对象。

需要做更多的测试,但是我相信这个问题已经解决。

10-06 09:12
查看更多