Delphi如何为新的ITextRange2类型接口导入类型库?

Delphi如何为新的ITextRange2类型接口导入类型库?,delphi,delphi-2007,richedit,typelib,Delphi,Delphi 2007,Richedit,Typelib,我正在使用Delphi中的Microsoft文本对象模型类型库来使用Microsoft RichEdit控件的一些功能。该类型库包含在一个免费组件中,多年来工作得非常好。例如,下面是一个ITextDocument接口,它显示: ITextDocument = interface(IDispatch) ['{8CC497C0-A1DF-11CE-8098-00AA0047BE5D}'] function Get_Name: WideString; safecall; f

我正在使用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;
  ...
我不知道这是怎么产生的。现在我想为在Windows8(MSFTEDIT.DLL)中为RichEdit发布的新接口更新它。例如,ITextDocument2中有一个Range2方法,根据MSDN,还有一个新的ITextRange2接口。有什么方法可以使用Delphi的导入类型库功能来定义新接口吗

更新:我知道了如何生成该单元。在Delphi中,单击importcomponent,然后从注册的服务中选择“tom”。这就创建了一个与之完全相同的单元。现在的问题是,为了从Windows8获得新的“tom”界面,如果要求我在上面安装Delphi,那就太多了。一定有更简单的方法。不知何故,我必须在Win8上生成一个TLIB,然后在Windows7上的Delphi中导入它。有人知道如何在Windows 8上为msftedit.dll或tom接口生成TLIB吗


另一个发现:如果我在Delphi中以tlib打开msftedit.dll,它会显示所有接口。还有一个导出按钮,但单击时该按钮不起作用。什么也没发生。我在帮助文件和web上搜索了类型库资源管理器帮助,但没有找到有关“导出”按钮不起作用的原因的任何信息。

您可以使用命令行实用程序
tlibimp
在Windows 8上导入类型库。您可以在Delphi安装的
bin
目录中找到
tlibimp.exe
。由于要避免在Windows 8计算机上安装Delphi,请将
tlibimp.exe
传输到Windows 8计算机。然后运行以下命令:

tlibimp -P msftedit.dll

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

我在Windows 7 x86和Delphi 7中遇到了与SAPI相同的问题。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

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

这样您就不会收到“加载类型库时出错”的消息。忘了提到我正在使用Delphi2007,因为这是一个非unicode应用程序。但我仍然能够通过tnt和我自己的unicode补丁使用这个unicode dll。工作起来很有魅力!谢谢只是,我倒过来了。我已将msftedit.dll从Windows 8复制到此计算机,并在其上运行了tlibimp。您可能希望正确设置答案的大小和标点。目前这没有多大意义。