문제

나는 지금 너무 오랫동안 간단한 기능처럼 들리는 작업을 해왔습니다. 아이디어는 TreeView가있는 응용 프로그램이 있다는 것입니다. 이 treeview는 Windows 탐색기와 매우 유사한 파일 및 폴더로 구성된 데이터베이스의 내용을 나타냅니다. 따라서 사용자는 해당 파일/폴더를 내 앱에서 Windows 탐색기로 끌 수 있어야합니다.

나는 내가 사용하기로 결정했다 IStream 그들이 파일을 끌거나 an IStorage 폴더를 드래그하면. win32/com (그리고 여기에서 매우 도움이되는 사람의 멍청이)에 대해 알고 싶었던 것보다 아주 오랜 시간과 학습 방법을 마친 후에, 나는 마침내 그것을 가지고 있습니다. IStream 또는 IStorage 만들어진.

그런 다음 나는 이것을 통과하는 것을 발견했습니다 IStream 또는 IStorage Windows Explorer로, 나는 그것을 STGMEDIUM. 물론, 매체는 양도 될 것입니다 IStream 또는 IStorage, 내가 사용하는 것에 따라, 그러나 그것을 이해할 때 medium.unionmember 에 대한 포인터 여야합니다 IStream/IStorage.

고정 된 키워드를 사용해 보았지만 (물론 멍청하지는 않습니다), 폭파 된 것을 바이트 어레이로 변환하려고 시도했지만 그렇게 할 수있는 방법을 찾을 수는 없습니다. gchandle을 사용하여 고정 (그러나 여전히 불가피하지는 않습니다) 및 작동하지 않은 다른 몇 가지 사항.

그래서 내 질문은 이것입니다 : 주어진 IStorage s 그리고 STGMEDIUM m, 어떻게 채워집니다 m.unionmember 그래서 Windows 탐색기가 행복하고 드롭을 받아 들일 것입니까?

도움이 되었습니까?

해결책

일반적으로 C 노조는 사용을 표현합니다 StructLayout.Explicit C#에서. 그러나 이것은 아마도 당신의 경우에 작동하지 않을 것입니다. IStream 그리고 IStorage 이와 같은 참고 문헌, 마샬러는 둘 다 마샬을 시도 할 것입니다. 가장 좋은 방법은 아마도 필드를 다음과 같이 선언하는 것입니다. IntPtr 당신의 선언에서 STGMEDIUM, 및 사용 Marshal.GetIUnknownForObject 초기화합니다.

다른 팁

나는 주제가 오랫동안 구식이라고 생각하지만 파일 드래그 앤 드롭을 찾는 사람은이 토론과 특히 dbirdz의 게시물을 확인합니다. http://www.daniweb.com/forums/thread166429.html

내 눈에는 이것이이 응용 프로그램에도 적용될 것입니다. 나는 스트림을 임시 파일로 작성하여 해당 위치로 옮길 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top