gpt4 book ai didi

c# - COM 接口(interface) Photoshop 兼容性问题

转载 作者:太空狗 更新时间:2023-10-30 01:25:58 27 4
gpt4 key购买 nike

我们正在为 Photoshop 编写一个简单的 .NET C# COM 应用程序,该应用程序旨在在从 CS2 到 CS5 的所有版本以及介于两者之间的所有版本上运行。同样的应用程序也以 JavaScript 形式存在,并且它适用于所有上述版本,因为我们避免实现特定于版本的功能。

我们遇到的问题与 COM 接口(interface)有关。例如,如果我们的应用程序是使用来自 Photoshop CSx 的 Interop.Photoshop DLL 编译的,它就不会在 Photoshop CSy 上运行。这似乎是因为注册表 CLSID 特定于每个版本的 Photoshop,导致我们的应用程序找不到正确的 COM 接口(interface) DLL,如果在安装了与我们编译的不同版本的 Photoshop 的系统上运行(假设两个应用程序是 32 位)。

如果这确实是问题所在,我们想知道是否可以使用 CSy CLSID 重新注册 Photoshop 版本 CSx 的 COM 接口(interface),忽略版本之间功能可能不同的事实。

更具体的信息如下:

我们主要的 Photoshop.Application CLSID 位于注册表中的此处:HKEY_CLASSES_ROOT\Photoshop.Application\CLSID此 CLSID 必须与我们的应用程序为其构建的 CLSID 相匹配。例如,此 ID 在 CS5 和 CS5.1 之间有所不同。

我们今天唯一的解决方案是为特定版本的 Photoshop 构建特定版本的应用程序,这只有在我们安装了该特定应用程序版本的情况下才有可能。

我们得到的错误代码是 0x80040154,“为 CLSID 为 {116EE066-135E-4F63-8D0E-78F62705FBFC} 的组件检索 COM 类工厂失败”。此应用程序使用 CS5.1 构建,但在 CS5.04 上运行,导致找不到 COM 接口(interface)。此 CLSID 特定于 CS5.1。总之,我们需要重新注册 COM 接口(interface)以匹配 CS5.04 的 CLSID,以便能够在该特定版本上运行我们的应用程序。这可能还是有其他方法?

非常感谢我们可以就此事获得的任何帮助或提示。

最佳答案

更改 COM 类和接口(interface)的 GUID 是一项硬性要求,它避免了 DLL hell 。调用您现在正在处理的正常问题:版本 hell 。当您尝试使用机器上未安装的代码块版本时,您会收到一条诊断消息,而不是随机的无法诊断的故障。您无法可靠地重新注册,这可能会严重破坏客户的机器。

是的,您可以按照 Javascript 的方式进行操作:使用后期绑定(bind)。您不使用互操作库。用4之前的版本用C#做起来很痛苦,必须要用反射。但是使用 VB.NET 或 C# 版本 4 的 dynamic 关键字很容易做到。这KB article使用旧方法显示 C# 中的后期绑定(bind)。使用 dynamic 关键字,您可以按照现在的方式编写代码,而不是对象创建语法。任何类型的版本不匹配问题仍然会导致异常,但只会在属性或方法调用时发生,并且只会在运行时发生,不会在编译时发生。

关于c# - COM 接口(interface) Photoshop 兼容性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com