gpt4 book ai didi

c++ - MIDL 更改接口(interface)名称

转载 作者:太空狗 更新时间:2023-10-29 20:39:51 25 4
gpt4 key购买 nike

我有一个 COM dll,它由使用 COM Inter-op 的 .NET 应用程序使用。在其中一个 CoClasses 中,有一个名为 IT6TrackData 的接口(interface),它有一个名为 TrackData 的获取属性

来自 IDL 文件:

Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}

当查看上述 IDL 文件的 TLB 文件时,它显示属性为 trackData(小写的 t)出于某种原因,客户端应用程序将此属性称为 trackData,并且到目前为止一切正常。

作为增强的一部分,上述接口(interface)已升级为具有 put 属性

Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1)] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
}

现在,当查看上述 IDL 文件的 TLB 文件时,它显示属性为 TrackData(t 为大写),这打破了旧的 .NET 客户端继续引用小写字母“t”的 trackData。

我已经阅读了这篇知识库文章 http://support2.microsoft.com/kb/220137/en-gb

但是有解决办法吗,有没有人知道解决这个问题的方法。

感谢您的关注。

IDL 文件

import "oaidl.idl";
import "ocidl.idl";

[
object,
uuid(72867CE8-41B6-459E-A258-C7A162A26D5E),
dual,
nonextensible,
helpstring("ITFST6TrackData Interface"),
pointer_default(unique)
]
interface ITFST6TrackData : IDispatch{
[propget, id(1), helpstring("property TrackData")] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1), helpstring("property TrackData")] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
};
[
uuid(1D7ABC17-2738-4373-9B6B-239E344DBD21),
version(1.0),
helpstring("SampleCom 1.0 Type Library")
]
library SampleComLib
{
importlib("stdole2.tlb");
[
uuid(2013CC98-47A7-468F-912A-2A2CAE25E327),
helpstring("TFST6TrackData Class")
]
coclass TFST6TrackData
{
[default] interface ITFST6TrackData;
};
};

最佳答案

这是 Windows 内置的类型库生成器遭到黑客攻击的副作用。它有一个解决由不区分大小写的语言引起的问题的方法。这可能会在一个外壳中声明一种类型,但在另一个外壳中的其他地方引用它。 Visual Basic 是此类语言的主要示例。

黑客非常粗糙,它采用它遇到的第一个标识符的大小写,然后更改任何后续标识符的大小写以匹配。意外大小写更改的最典型原因是参数名称,通常以小写首字母拼写。所以您可能在以前版本的代码中有一个“trackData”方法参数。

并且在您的修订版中,要么更改了标识符的顺序,要么您重命名或删除了该参数。现在取而代之的是“TrackData”。

如果您现有的客户端代码依赖于原始外壳,那么除了更改源代码中的外壳外,您几乎无能为力。 Fugly 修复,但对您的客户来说不足为奇,因为他们无法区分它们:)

关于c++ - MIDL 更改接口(interface)名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26302927/

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