2011-10-07 3 views
1

가능한 경우 C#의 Offline Files API을 사용하는 방법을 알아 내려고하고 있습니다. API가 COM API라면 이론적으로 C#에서 here 메서드를 사용하여 호출 할 수 있어야한다고 생각합니다.C#에서 Microsoft의 오프라인 파일 API를 사용할 수 있습니까?

불행히도 COM API가 아닌지 또는 알려주는지 전혀 알 수 없습니다. (보다 일반적인 측면 참고로, 사람이 어떻게 API는 COM 호환되는지 여부를 말해 말해 줄 수 있습니까?)

을 내가 성공적으로처럼 선언함으로써 API에서 OfflineFilesQueryStatus 함수를 호출했습니다

[DllImport("cscapi.dll")] 
public static extern int OfflineFilesQueryStatus(out bool pbActive, out bool pbEnabled); 

하지만 인터페이스를 사용하는 방법을 잘 모르겠습니다 (즉, IOfflineFilesCache 개체를 만드는 방법을 모르겠습니다.)

아무에게도 설명해 줄 수 있습니까?

+1

확실히 COM API입니다. 연결된 문서에 "** COM 기반 오프라인 파일 API 인터페이스 **를 사용하여 다른 모든 오프라인 파일 작업을 수행 할 수 있습니다." 또한 C# 4.0을 사용하는 경우 http://blogs.msdn.com/b/samng/archive/2009/06/16/com-interop-in-c-4-0을 읽어 보시기 바랍니다. aspx를 사용하면 연결된 이전 기사를 통해 COM interop이 어떻게 변경되었는지 확인할 수 있습니다. –

답변

3

글쎄, 그것은

는 클래스 ID CLSID_OfflineFilesCache를 사용하여 인 - PROC COM 서버로이 객체를 생성했다.

C 또는 C++에서 호출하면 CoCreateObject이 호출됩니다. CoCreateObject에 대한 .NET 대체품 만 사용하십시오. 나는 런타임 호출 가능 래퍼/기본 interop 어셈블리가 당신이 일반 C# new 구문을 사용하여 객체를 생성 할 수있게 해주는 메타 데이터를 방출한다고 생각했다. 당신에 대한 참조를 추가하여 MobSync.dll Interop 어셈블리를 만들 수 없습니다,

불행하게도 : .NET은 COM 개체에 대한 평소보다 더 어렵다에서 오프라인 파일 API를 사용하여


은 MSDN은 이유를 설명 이 COM 구성 요소는 Visual Studio 솔루션 탐색기에 있습니다. 이렇게하면 오류가 발생합니다. MobSync.dll은 많은 COM 구성 요소 DLL과 달리 내부에 COM interop를 지원하는 형식 라이브러리 (TLB) 정보가 없기 때문에 발생합니다.

.NET은 interop 용 형식 라이브러리를 사용하지만 Microsoft는 이러한 인터페이스에 대해 C/C++ 헤더 만 제공했습니다. IDL 해킹을 통해 작동하게 할 수 있습니다. Creating a Custom Synchronization Manager Handler sample on MSDN을 참조하십시오.이 고정 방법에는 "수정"mobsync.dll이 있습니다. 동일한 단계를 수행해야하지만 cscapi/cscobj IDL을 사용해야합니다.

그러나 가장 쉽고 최상의 지원 방식은 C++/CLI를 사용하는 것입니다. 여기서 직접 #include SDK 헤더를 사용할 수 있으며 C#에서 쉽게 사용할 수있는 관리되는 유형을 정의 할 수도 있습니다.

+0

감사합니다. @ 벤. 나는 COM 물건이 어떻게 작동하는지 완전히 오해하고 있을지 모르지만 COM 구성 요소라면 내 프로젝트에서 dll에 대한 참조를 추가 할 수 없어야합니까? 시도 할 때 다음과 같이 나타납니다. 'C : \ Windows \ System32 \ cscobj.dll'에 대한 참조를 추가 할 수 없습니다. 파일에 액세스 할 수 있는지, 유효한 어셈블리 또는 COM 구성 요소인지 확인하십시오. – Eric

+0

@Eric : DLL이 아니라 COM 구성 요소 (형식 라이브러리 외에도 레지스트리 정보를 사용)에 대한 참조를 추가 할 수 있습니다. COM 구성 요소 목록에 오프라인 파일이 보이지 않지만 OLEView에 표시됩니다. –

관련 문제