【发布时间】:2010-10-02 09:48:06
【问题描述】:
我有一组用 Delphi.NET (.NET 1.1) 编写的库,我想在我的 Win32 (Delphi) 应用程序中使用它们。对于与性能相关的问题,我决定遵循 COM 路线。
有时,在重建 DLL 后,当我尝试实例化通过 COM 公开的对象时,Win32 应用程序在 CreateComObject 调用处挂起。我该如何解决这个问题?
为了通过 COM 公开 Delphi.NET 库,我在每个类减速上方添加以下属性:
[Comvisible(true)]
[Guid('some guid')]
[ClassInterface(ClassInterfaceType.AutoDual)]
编译 DLL 后,我生成了一个TLB.pas 文件,该文件包含 DLL 中所有公共和 COM 可见类和接口的定义。这个文件允许我更容易地在我的 Delphi Win32 应用程序中使用 COM 对象。最后,我使用regasm注册.dll和.tlb。
我尝试注销并运行引用 DLL 的 Win32 应用程序;我预计会收到一个运行时错误,但应用程序再次挂起CreateComObject() 调用。
我也尝试过注销和注册 DLL,但没有任何运气。
附言我正在使用 BDS 2006
【问题讨论】:
-
它只是挂起?没有CPU?没有错误?永远不会回来?
-
是的,它永远不会从调用中返回,CPU 使用率也没有固定。
-
它发生在其他语言中吗? C++ 还是 VB/VBScript?
-
为了隔离问题,我使用 Ruby 实例化了 com 对象,它成功了!但是,我需要使用 Dephi 2007 (Win32) P.S.我正在单独装饰带有 ComVisible 属性的类,而不是整个程序集,这会有所不同吗?
标签: .net delphi com dll typelib