具有两个接口的Delphi COM dll。只有一个clsid被注册

具有两个接口的Delphi COM dll。只有一个clsid被注册,delphi,com,Delphi,Com,我已经创建了一个Delphi COM dll,它实现了两个不同的接口,每个接口都有自己的类id。它没有在Delphi(XE7)IDE中正确注册,但是在提升的命令提示符中regsvr32非常高兴,并说它成功了 但是,两个接口中只有一个已注册,注册表中没有另一个接口的clsid的迹象,并且通过尝试连接到失败而未注册错误来确认。当然,我希望两个接口都注册。我最好的做法是什么?我不是说这是正确的答案,但我导出了工作界面的clsid,编辑了文件,更改了GUID,并将其合并回注册表。它现在可以在两个接口上工

我已经创建了一个Delphi COM dll,它实现了两个不同的接口,每个接口都有自己的类id。它没有在Delphi(XE7)IDE中正确注册,但是在提升的命令提示符中regsvr32非常高兴,并说它成功了


但是,两个接口中只有一个已注册,注册表中没有另一个接口的clsid的迹象,并且通过尝试连接到失败而未注册错误来确认。当然,我希望两个接口都注册。我最好的做法是什么?

我不是说这是正确的答案,但我导出了工作界面的clsid,编辑了文件,更改了GUID,并将其合并回注册表。它现在可以在两个接口上工作,尽管它们在不同的线程上(dll是多线程的,从来都不是一个无聊的时刻!)

这样做感觉不对!这是我编辑过的文件。只更改了guid

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{C5EF04CB-63D6-4184-9873-2ADCF6C26EF8}]
@="MyRDP"

[HKEY_CLASSES_ROOT\CLSID\{C5EF04CB-63D6-4184-9873-2ADCF6C26EF8}\InprocServer32]
@="C:\\dev\\VirtualChannels\\Client2\\Client2.dll"
"ThreadingModel"="Free"

[HKEY_CLASSES_ROOT\CLSID\{C5EF04CB-63D6-4184-9873-2ADCF6C26EF8}\ProgID]
@="Client2.Plugin"

使用TRegSvr而不是revsvr32,并单步通过它来验证每个接口是否已注册?这是一个有趣的想法。遗憾的是,它无法加载。。。dll。这将从提升的提示中删除。与此同时,regsvr32仍然成功。我又做了一次只是为了检查一下。所以也许我需要检查我的dll。我有源代码,因此将逐步完成。好吧,请记住,您有TRegSvr的源代码,可以将其直接移植到您自己的应用程序中,以了解发生了什么(没有发生的事情)…在有或没有-c参数的情况下,它通过RegisterAxLib到达OutputFmt(SRegSuccessful)行但最终在130号线上的免费图书馆爆炸了。库在LoadLibrary中可以正常加载,但在释放时会爆炸。我试着用try-except包装那个免费库,但它只是砰的一声。请在你的问题中添加代码,也许你做错了什么…你在做什么?当你的意思是“coclass”时,你是在用“interface”这个词吗?您不只是为接口添加条目。你把它们加入了一个coclass。如果没有显示对象和接口定义,您编写的所有内容都非常混乱。COM对象具有接口。您不创建接口,而是创建具有接口的COM对象。创建COM对象后(或在CoCreateInstance时),将通过IUnknown.QueryInterface.Ok查询该对象的接口。我对这个还是相当陌生的。椰子。所以问题仍然是Delphi没有在这个dll中注册这两个类。我试过tregsvr,但也没有。可能你的定义有问题。。。比如拥有公共类或公共构造函数。我已经25年多没有做过涡轮帕斯卡了。。。永远不要使用COM。