【问题标题】:Delphi how to import type library for new ITextRange2 type interfaces?Delphi 如何为新的 ITextRange2 类型接口导入类型库?
【发布时间】:2013-07-30 02:10:11
【问题描述】:

我在 Delphi 中使用 Microsoft 文本对象模型类型库来使用 Microsoft RichEdit 控件的某些功能。该类型库包含在一个免费软件组件中,并且多年来运行良好。例如,这里显示了一个 ITextDocument 界面:

  ITextDocument = interface(IDispatch)
    ['{8CC497C0-A1DF-11CE-8098-00AA0047BE5D}']
    function Get_Name: WideString; safecall;
    function Get_Selection: ITextSelection; safecall;
    function Get_StoryCount: Integer; safecall;
  ...

我不知道它是如何创建的。现在我想为 Windows 8 (MSFTEDIT.DLL) 中为 RichEdit 发布的新接口更新它。例如,在 ITextDocument2 中有一个 Range2 方法,根据 MSDN 有一个新的 ITextRange2 接口。有什么方法可以使用 Delphi 的导入类型库功能来组成新接口的定义?

更新:我想出了如何生成该单元。在 Delphi 中,单击 Import Component,然后从注册的服务中选择“tom”。这将创建一个完全一样的单元。现在的问题是,为了从 Windows 8 中获得新的“tom”界面,如果我需要在其上安装 Delphi,那就太过分了。必须有更简单的方法。不知何故,我必须在 Win 8 上生成一个 TLIB,然后将其导入我在 Windows 7 上的 Delphi 中。有人知道如何在 Windows 8 上为那个 msftedit.dll 或 tom 接口生成一个 TLIB 吗?

另一个发现: 如果我在 Delphi 中打开 msftedit.dll 作为 tlib 打开,它会显示所有接口。也有一个导出按钮,但单击时不起作用。没发生什么事。我在帮助文件和网络上搜索了 Type Lib Explorer 帮助,但没有找到任何关于为什么该导出按钮不起作用的任何信息。

【问题讨论】:

  • 糟糕。忘了提到我使用的是 Delphi 2007,因为这是一个非 unicode 应用程序。但是我仍然可以通过 tnt 和我自己的 unicode 补丁使用这个 unicode dll。

标签: delphi delphi-2007 richedit typelib


【解决方案1】:

您可以使用命令行实用程序tlibimp 在Windows 8 上导入类型库。您可以在Delphi 安装的bin 目录中找到tlibimp.exe。由于您想避免在 Windows 8 机器上安装 Delphi,请将tlibimp.exe 转移到 Windows 8 机器上。然后运行这个命令:

tlibimp -P msftedit.dll

这将生成您需要的 Pascal 类型库导入文件。

【讨论】:

  • 工作就像一个魅力!谢谢。只是,我反其道而行之。我将 msftedit.dll 从 Windows 8 复制到这台计算机并在其上运行 tlibimp。
【解决方案2】:

我在 Windows 7 x86 和 Delphi 7 中遇到了同样的问题。32 位架构中的 SAPI api 是 sapi.dll。 tlibimp.exe 在路径上找不到此 DLL:

D:\Temp\Merda>tlibimp -P  sapi.dll
Embarcadero TLIBIMP Version 12.16580
Copyright(c) 1995-2010 Embarcadero Technologies, Inc.

Opening  sapi.dll
Error loading type library sapi.dl

我使用 Microsoft OLE/COM 对象查看器找到了它。像魅力一样工作:

D:\Temp>tlibimp -P c:\Windows\System32\Speech\Common\sapi.dll
Embarcadero TLIBIMP Version 12.16580
Copyright(c) 1995-2010 Embarcadero Technologies, Inc.

Opening  c:\Windows\System32\Speech\Common\sapi.dll
Type library loaded ....
Created  D:\Temp\SpeechLib_TLB.dcr
Created  D:\Temp\SpeechLib_TLB.pas

【讨论】:

    【解决方案3】:

    运行 tlibimp.exe 仅适用于使用“.dll”的 .net 3.5...如果您创建一个 .net 4.N“.dll”的“.tlb”,则 tlibimp.exe 将与下面的命令。

    "C:\windows\Microsoft.NET\Framework\...\RegAsm.exe" My.Com.dll /tlb
    
    "C:\Program Files (x86)\Borland\...\Bin\tlibimp.exe" My.Com.tlb
    

    这样您就不会收到“加载类型库时出错”的消息。

    【讨论】:

    • 您可能希望正确地大写和标点您的答案。目前它没有多大意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2023-03-22
    • 1970-01-01
    • 2011-11-27
    • 2011-03-18
    • 2021-05-24
    相关资源
    最近更新 更多