Delphi调用Sage 50 SDK对象提示类未注册,CLSID未完成注册
Sage 50 SDK Delphi集成:CLSID未注册导致"Class not registered"错误
操作系统:Windows 11 64位
我所在的软件开发公司有客户需要集成Sage 50账户数据库。和Sage UK多次沟通后,我们拿到了面向C#/VB.Net开发者的Sage 50 SDK,但我记得这个SDK可以导入Delphi使用。
我已经完成以下操作:
- 在Windows中注册Sage类型库(
SageDataObject280.tlb)并导入Delphi - 解决依赖包相关问题,成功构建包
- 生成
SageDataObject280_TLB.pas文件,安装类型库后,所有类对象都已注册到Delphi工具面板,可正常访问 - 使用Delphi工具
TRegsvr.exe注册类型库服务器(问题实际出在这里) - 创建小型概念验证应用测试所需功能
- 成功连接到Sage 50账户数据库,但调用其他对象时出现Class not registered错误
检查注册表后发现,所有IID(接口ID)均已正确注册,但所有类(CLSID)本身未注册,这直接导致了上述错误。
我获取了TRegsvr工具的源代码,跟踪后发现注册过程使用Windows ActiveX原生注册方法,我无法控制该过程。已经花了整整两个工作日搜索解决方案,但没有找到满意的结果。
这是项目的关键障碍,解决不了的话就无法为客户提供所需的解决方案。
以下是类型库PAS文件的片段:
unit SageDataObject280_TLB; ... uses Winapi.Windows, System.Classes, System.Variants, System.Win.StdVCL, Vcl.Graphics, Vcl.OleServer, Winapi.ActiveX; // *********************************************************************// // GUIDS declared in the TypeLibrary. Following prefixes are used: // Type Libraries : LIBID_xxxx // CoClasses : CLASS_xxxx // DISPInterfaces : DIID_xxxx // Non-DISP interfaces: IID_xxxx // *********************************************************************// const // TypeLibrary Major and minor versions SageDataObject280MajorVersion = 28; SageDataObject280MinorVersion = 0; LIBID_SageDataObject280: TGUID = '{D7F4B92E-F1B4-4996-80D1-76AC2448EDAB}'; ... DIID_ISalesRecord: TGUID = '{C18182B6-F2D2-11D0-9E63-008048AADD4E}'; // 所有DIID均已正常注册 CLASS_SalesRecord: TGUID = '{C18182B8-F2D2-11D0-9E63-008048AADD4E}'; // 无CLASS对象被注册 ...
内容的提问来源于stack exchange,提问作者Christian VG
相关产品推荐
相关产品推荐

