COM Inter-op를 사용하는 .NET 응용 프로그램에서 사용하는 COM dll이 있습니다. 그것을MIDL이 인터페이스 이름을 변경합니다.
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}
TLB의 파일이 위의 IDL 파일을 볼 경우 : coclass에 하나에서 는 IT6TrackData라는 인터페이스가 있으며 하나는 IDL 파일에서 TrackData
라는 속성을 가져가 trackData (소문자 t)로 속성을 표시합니다. 어떤 이유로 클라이언트 응용 프로그램에서이 속성을 trackData로 참조하고 있었고 지금까지 모든 것이 제대로 작동했습니다.
인터페이스 상기 인핸스의 일부로서 이제 TLB 파일은 상기 IDL 파일을 볼 때 풋 속성
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1)] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
}
을 업그레이드하고, 그 TrackData (t 대문자에서와 같이 속성을 표시), 이는 소문자로 "t"를 사용하여 trackData를 계속 참조하는 이전 .NET 클라이언트를 손상시킵니다. 나는이 기술 자료 문서 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;
};
};
두 번째 인터페이스를 추가해 보았습니까? 같은 문제가 발생합니까? – rrirower
새로 추가 된 put 속성을 제거한 후에도 여전히 T (대문자)로 표시됩니다 – user2101801