2

我在 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 发布的新接口更新它。例如,根据 MSDN,ITextDocument2 中有一个 Range2 方法和一个新的 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 帮助,但没有找到任何关于为什么该导出按钮不起作用的任何信息。

4

3 回答 3

2

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

tlibimp -P msftedit.dll

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

于 2013-07-30T08:33:19.203 回答
0

我在 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 Object Viewer 找到了它。奇迹般有效:

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
于 2016-01-16T20:51:35.910 回答
0

运行 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

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

于 2019-12-19T14:21:11.967 回答