我有一组用 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 对象。最后,我注册了.dll
和.tlb
飞行使用regasm
.
我尝试取消注册并运行引用 DLL 的 Win32 应用程序;我预计会收到运行时错误,但应用程序再次挂在CreateComObject()
call.
我也尝试过注销和注册 DLL,但没有成功。
附注我使用的是 BDS 2006
我对 COM 有不同的经历; COM 有时要变得稳定确实很痛苦,所以如果不需要,我经常采取另一条路线。
在这种情况下,您可以尝试使用逆 P/Invoke 来绕过 COM。
以下是一些可以帮助您解决此问题的文章:
http://blogs.codegear.com/timjarvis/2006/11/10/29270 http://blogs.codegear.com/timjarvis/2006/11/10/29270
http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm
http://www.blong.com/Conferences/BorCon2004/Interop1/Win32AndDotNetInterop.htm http://www.blong.com/Conferences/BorCon2004/Interop1/Win32AndDotNetInterop.htm
当你用谷歌搜索时,你可以获得更多的点击量《德尔福逆PInvoke》 http://www.google.nl/search?q=delphi+inverse+pinvoke但以上是最好的文章。
亲切的问候,
杰罗恩·普鲁默斯
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)