可以从.NET与64位COM服务器(Photoshop)进行交互吗?

unr*_*ity 11 .net c# com photoshop

我一直在尝试编写一些与Photoshop交互的代码,通过添加COM引用和后期绑定.我花了一段时间才意识到代码确实有效,但不是64位版本的Photoshop.

我用64位Photoshop获得的例外情况如下:

COMException未处理

由于以下错误,检索具有CLSID {D9389EDE-AEF8-4092-9377-075E94B7CB9A}的组件的COM类工厂失败:80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE)).

我的应用程序是否可以与64位版本的Photoshop通信?或者仅限于与32位版本进行通信?

我在寻求解决方案的众多尝试之一中遇到过这种情况,但我不知道如何CLSCTX_ACTIVATE_64_BIT_SERVER使用COM引用或后期绑定来使用该标志,好吧,假设它解决方案.

此处发生异常:

Type photoshopType = Type.GetTypeFromProgID("Photoshop.Application");
if (photoshopType != null)
{
    object photoshop = Activator.CreateInstance(photoshopType);
Run Code Online (Sandbox Code Playgroud)

Hea*_*ath 1

如果标记为 AnyCPU(编译为 MSIL),.NET 应用程序可执行文件 (.exe) 将始终以正在运行的处理器体系结构的本机位数运行。因此,在 64 位平台上运行的任何 MSIL 程序集都将以 64 位运行,在 32 位平台上运行则以 32 位运行。

在您的情况下,您要么想要针对 AnyCPU 进行编译,但如果您必须强制使用 x64 64 位互操作。当然,这在 32 位机器上不起作用。这将从注册表的 64 位视图中本机读取(包括 InProc

您还必须注意指针的整理方式。如果编写您自己的互操作代理,请务必使用 IntPtr 作为句柄。