我有一个 COM dll ,它由使用 COM 互操作的 .NET 应用程序使用。在其中一个 CoClasses 中,有一个名为 IT6TrackData 的接口,它有一个名为 TrackData 的 get 属性
从 IDL 文件中:
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}
当查看上述 IDL 文件的 TLB 文件时,它显示属性为 trackData(小写的 t) 出于某种原因,客户端应用程序将此属性称为 trackData 并且到目前为止一切正常。
作为增强的一部分,上述接口已升级为具有 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;
};
};