C# 将com visible方法的签名更改为使用stdcall并返回接口
我们目前正在尝试更改COM可视方法的签名,因为这将允许我们使用相同的接口,而无需考虑实际对象是否已通过COM创建 为此,我们在Delphi中定义了一个接口,如:C# 将com visible方法的签名更改为使用stdcall并返回接口,c#,.net,delphi,com,com-interop,C#,.net,Delphi,Com,Com Interop,我们目前正在尝试更改COM可视方法的签名,因为这将允许我们使用相同的接口,而无需考虑实际对象是否已通过COM创建 为此,我们在Delphi中定义了一个接口,如: ISomeInterface = interface(IUnknown) ['{67C7E941-DB69-41A0-B325-1C76ADEFFC33}'] function GetSomeValue: Integer; stdcall; function GetInterface: ISomeInterface; std
ISomeInterface = interface(IUnknown)
['{67C7E941-DB69-41A0-B325-1C76ADEFFC33}']
function GetSomeValue: Integer; stdcall;
function GetInterface: ISomeInterface; stdcall;
procedure GetInterface2(out pParam: ISomeInterface); stdcall;
end;
并在C语言中实现了相应的接口#
我们在TLB中看到的签名似乎与预期的一样。签名和呼叫约定相互匹配。我们可以编译、创建实现接口的对象,并使用“GetSomeValue”和“GetInterface2”方法
但是调用“GetInterface”函数不起作用(CLR似乎立即终止,甚至没有提供异常)
这最终导致了一个问题:是否可以将com方法的返回类型更改为返回接口(按ref)?如果是,怎么做
此外:似乎可以“按值”返回值(如GetSomeValue),但这是否有效?或者COM方法一定要返回HResult吗
[ComVisible(true)]
[Guid("67C7E941-DB69-41A0-B325-1C76ADEFFC33")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ISomeInterface
{
[PreserveSig]
int GetSomeValue();
[PreserveSig]
ISomeInterface GetInterface();
[PreserveSig]
void GetInterface2(out ISomeInterface);
}