0

我正在使用 Delphi 和 Add-in Express VCL 开发 Excel COM 插件。为了在我的表单中启用主题,我使用了清单和激活上下文,正如 David Heffernan 在此处的回答中所写:

将 Windows 主题应用到 Office Com 加载项

根据链接的帖子,这是我的代码:

var
  ActivationContext: TActivationContext;
begin
  try
    ActivationContext := TActivationContext.Create;
    try
      ShowMessage('Exception comes after this');
    finally
      ActivationContext.Free;
    end;
  except
    on E:Exception do
      ShowMessage(Format(SErrorString, [E.ClassName, E.Message]));
  end;
end;

消息对话框正确显示(主题!)但是当调用 ActivationContext.Free 时(调用DeactivateActCtx(0, FCookie);)我得到以下异常:

EExternalException:外部异常 C000000D

请注意,出于演示目的,我在上面的代码中插入了 ShowMessage,通常我正在创建并显示具有相同结果的表单(错误)。

我怎样才能解决这个问题?


更新:这是有问题的清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="AddinName"
    type="win32"
/>
<description>Addin description</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

我的资源文件:

2 24 "XP.manifest"

包含 res 文件的代码:

{$R XPManifest\xp_manifest.RES}

AddinName 与 Delphi 项目的名称匹配是否重要?

还有一点需要注意:插件是为64 位 Excel 编译的。

4

0 回答 0