我在Delphi中使用Microsoft Text Object Model类型库来使用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?
另一个发现:如果我通过打开tlib打开Delphi中的msftedit.dll,它会显示所有接口。还有一个导出按钮,但单击时不起作用。什么都没发生。我在帮助文件和网络上搜索了Type Lib Explorer帮助,但没有找到导致按钮不起作用的原因。
答案 0 :(得分:2)
您可以使用命令行实用程序tlibimp
在Windows 8上导入类型库。您可以在Delphi安装的tlibimp.exe
目录中找到bin
。由于您要避免在Windows 8计算机上安装Delphi,请将tlibimp.exe
传输到Windows 8计算机。然后运行此命令:
tlibimp -P msftedit.dll
这将生成您需要的Pascal类型库导入文件。
答案 1 :(得分:0)
我在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
答案 2 :(得分:0)
如果您创建了.net 4.N“ .dll”的“ .tlb”,则tlibimp.exe仅适用于使用“ .dll”的.net 3.5。然后,tlibimp.exe在以下命令中可以正常工作。
@inject Microsoft.Extensions.Options.IOptions<Configuration> cfg
@code {
private ViewModel _m;
protected override void OnInitialized()
{
base.OnInitialized();
_m = new ViewModel(cfg.Value);
}
protected async Task DoSearchAsync()
{
await _m.PerformSearchAsync();
}
}
这样,您不会收到消息“错误加载类型库”。