首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中通过COM对象使用.Net类有时会挂起

在Delphi中通过COM对象使用.Net类有时会挂起
EN

Stack Overflow用户
提问于 2009-01-20 08:41:56
回答 3查看 3.1K关注 0票数 2

我有一组用Delphi.NET (Delphi1.1)编写的库,我想在我的Win32 (.NET )应用程序中使用它们。对于与性能相关的问题,我决定遵循COM路线。

有时,在重新生成动态链接库之后,当我尝试实例化通过COM公开的对象时,Win32应用程序在CreateComObject调用时挂起。我该如何解决这个问题?

为了通过COM公开Delphi.NET库,我在每个类减速之上添加了以下属性:

代码语言:javascript
复制
[Comvisible(true)] 
[Guid('some guid')] 
[ClassInterface(ClassInterfaceType.AutoDual)] 

编译完动态链接库之后,我生成了一个TLB.pas文件,该文件包含动态链接库中所有公共和COM可见的类和接口的定义。这个文件使我可以更容易地在我的Delphi Win32应用程序中使用COM对象。最后,我使用regasm注册.dll.tlb文件。

我尝试注销并运行引用DLL的Win32应用程序;我预计会收到运行时错误,但应用程序再次在CreateComObject()调用时挂起。

我也尝试过取消注册和注册DLL,但都没有成功。

附注:我正在使用BDS 2006

EN

回答 3

Stack Overflow用户

发布于 2009-01-26 19:26:11

我对COM有不同的体验;COM有时很难稳定下来,所以如果不需要的话,我通常会选择另一种方式。

在这种情况下,您可以尝试使用逆向P/Invoke绕过COM。

这里有几篇文章可以帮助你做到这一点:

http://blogs.codegear.com/timjarvis/2006/11/10/29270 http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm http://www.blong.com/Conferences/BorCon2004/Interop1/Win32AndDotNetInterop.htm

当你在"Delphi Inverse PInvoke"上搜索时,你可以得到更多的点击量,但上面的文章是最好的。

致以亲切的问候,

Jeroen Pluimers

票数 1
EN

Stack Overflow用户

发布于 2009-01-20 09:24:35

请确保以正确的方式关闭代码,而不只是在调试器中停止它。我发现使用调试器杀死进程间应用程序会导致各种问题,通常需要重新启动才能清除这些问题。做这件事需要纪律,因为通常情况下你可以毫无问题地做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2009-02-23 07:51:27

使用RemObjects Hydra是混合托管和非托管Delphi代码的一种简单方法。但不幸的是,它相当昂贵-499美元:(

更新:尝试Delphi.Net开源项目。此项目处于非活动状态,但您可以将其用于Win32 -> dotNet1.1程序集交互。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/460486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档