gpt4 book ai didi

vb.net - 在Delphi中使用COM类中的方法

转载 作者:行者123 更新时间:2023-12-03 18:35:14 26 4
gpt4 key购买 nike

我在VB.NET中创建了一个COM类。我正在尝试在Delphi 5.0中使用它。

我已经看到了有关该主题的一些示例/问题,即:

Call C# dll from Delphi

http://www.drbob42.com/delphi/headconv.htm

http://edn.embarcadero.com/article/32754

等等,但是这些都处理基本功能,而不处理自定义对象。

首先,我已经使用regasm注册了VB.NET COM DLL。

我的VB.NET COM对象定义如下:

<ComClass(Bridge.ClassId, Bridge.InterfaceId, Bridge.EventsId)> _
Public Class Bridge

' A creatable COM class must have a Public Sub New()
' with no parameters, otherwise, the class will not be
' registered in the COM registry and cannot be created
' via CreateObject.
Public Sub New()
MyBase.New()
End Sub

Public Function Quote(ByRef input As InObject) As ReturnObject
BLABLA
End Function

End Class


使用Input类:

<ComClass(InObject.ClassId, InObject.InterfaceId, InObject.EventsId)> _
Public Class InObject

End Class


和一个Result类:

<ComClass(ReturnObject.ClassId, ReturnObject.InterfaceId, ReturnObject.EventsId)> _
Public Class ReturnObject

End Class


请不要注意类名和其中缺少代码。我只想强调如何将它们定义为COM类。

我找不到在COM类中调用方法的Delphi代码的任何示例,或使用自定义对象作为输入和返回的方法的示例。但是,从我上面显示的示例中,我认为Delphi中声明要使用的函数的行将像这样:

function Bridge.Quote(i: InObject): ReturnObject; external 'Bridge.dll';


这无法编译。我收到一个错误:


函数需要结果类型


我做错了什么吗?

最佳答案

要创建ComObject,您有2个选项:


CoCreateInstance
https://msdn.microsoft.com/de-de/library/windows/desktop/ms686615(v=vs.85).aspx
这要求如前所述注册ComObject。您可以这样称呼它:

CoCreateInstance(YourClassID, nil, CLSCTX_INPROC_SERVER, YourInterfaceID, Result)
您的DLL导出一个函数,该函数创建请求的实例。然后,您可以在加载DLL时导入此函数。无需注册。

function MyFunc: IMyInterface; external 'MyDll.dll';


不要忘记使用两种语言都支持的合适的调用约定(例如stdcall或cdecl)

关于vb.net - 在Delphi中使用COM类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com