나는 COM에 정렬 화를 구현하는 세 가지 방법이있어 그것을 얻을으로 :COM은 인터페이스를 마샬링하는 방법을 어떻게 선택합니까?
- 형식 라이브러리 마샬링
- 프록시/스텁 마샬링 어떻게하는지
이제 객체에 의해 IMarshal을 구현
현재 다음과 같은 경험이 있습니다. 내 구성 요소는 다른 회사의 구성 요소에 의해 구현 된 사용자 지정 인터페이스 ICustomInterface
을 구현합니다. 내 구성 요소에 typelib이없고 IMarshal이 구현되어 있지 않습니다. 시스템 레지스트리에는 HKCR \ Interface {uuidof (ICustomInterface)} \ ProxyStubClsid32 키가 있으며 다른 회사에서 제공하는 라이브러리로 추적 할 수있는 프록시/스텁의 GUID가 있습니다.
이제 내 구성 요소 소비자가 내 구성 요소를 초기화 할 때 내 구성 요소에서 IMarshal을 요청하는 QueryInterface()를 호출하고 E_NOINTERFACE가 반환되면 아무것도 수행하지 않습니다. 왜 이것이 다른 회사의 프록시/스텁 라이브러리가 시작되지 않는 이유입니까?
아니요, 저는 없습니다. 모든 합리적인 설정으로 마법사를 시도했지만 그러한 함수를 선언하지는 않습니다. 나도이 이름으로 인터넷 검색을했다. 네가 이름의 철자가 틀렸습니까? – sharptooth
나는 낡은 코드를 파헤 치고 블라인드 쿼리가 실제로 내 자신의 함수라는 것을 알았다. LOL ..이 매크로를 사용하십시오 http://msdn.microsoft.com/en-us/library/5b6w5bwx(VS.80).aspx –
글쎄, 이것은 QI()에 연결하는 좋은 방법입니다.하지만 그게 전부입니다. IMarshal이 포함 된 iterfaces 집합에 함수가 호출되었습니다. 명백한 이유가 없습니다. – sharptooth