并在此先感谢您提供的任何建议/见解/协助。
背景:
我们有一个用于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对象。
需要做更多的测试,但是我相信这个问题已经解决。