2011-01-20 3 views
5

을 사용하여 구현 된 메서드 디 컴파일 방법 필자는 필요한 메서드가 아래와 같이 구현되었음을 알았습니다. 무슨 뜻이에요? 그것 뒤에 소스 코드를 볼 수 있습니까?Reflector를 사용하여 dll 파일을 디 컴파일 할 때 extern 키워드

[return: MarshalAs(UnmanagedType.BStr)] 
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x3a)] 
public virtual extern string GetCOLDText([In] int PageNumber, [In] int Row, [In] int Column, [In, Optional, DefaultParameterValue(0x7fffffff)] int Length); 

감사합니다.

답변

4

Reflector를 사용하여 tlbimp.exe에서 만든 COM interop 라이브러리를 볼 때 표시되는 내용입니다. IDE의 참조를 COM 탭이나 Browse 탭의 COM 서버에 추가하는 것도 마찬가지입니다.

이 메서드가 포함 된 외부 클래스 또는 인터페이스를 보면이 메서드가 포함 된 COM 코 클라스 나 인터페이스가 표시됩니다. 중요한 속성은 [ComImport]가 다른 DLL 및 [Guid], 모든 중요한 인터페이스 IID 또는 coclass CLSID에 구현되었음을 나타냅니다. COM 클래스와 인터페이스는 이름이 아닌 GUID로 고유하게 식별됩니다. CLSID GUID가 HKCR\CLSID\{guid} 키의 레지스트리에 있습니다.

이와 같은 COM 서버는 거의 항상 관리되지 않는 언어로 구현되며 C++이 가장 일반적이지만 Delphi 또는 VB6입니다. 컴파일 된 후에 C++ 코드를 디 컴파일하는 것은 효과가 없지만/disasm 옵션을 사용하여 Dumpbin.exe에서 뭔가를 얻을 수 있습니다. 어셈블리 언어 프로그래밍 기술과 자유 시간이 필요합니다. 라이센스 계약에서 거의 항상 명시 적으로 금지되어 있습니다.

+0

당신은 완전히 맞습니다. 인터페이스는 다음과 같이 시작됩니다 : [ComImport, TypeLibType ((short) 2), ClassInterface ((short) 0), Guid ("1CA8A500- E55C-11CF-9D38-00A02457680B ")]. 하지만 "다른 DLL"에 어떻게 접근 할 수 있는지 이해할 수 없습니까? 어셈블리를 이해하려고 노력하고 싶습니다. – Feyyaz

1

와트 이것은 관리되지 않는 (interop) DLL의 한 가지 방법이라는 것을 의미합니다. 대부분 C++ 및/또는 C로 작성했습니다

리플 렉터가 아닌 다른 도구를 사용하여 디 컴파일하려고 할 수도 있지만 쉽지는 않을 것이며 그 결과는 그리 좋지 않을 것입니다.

+0

다른 DLL을 호출하는 것입니까? 어떻게 다른 DLL을 찾을 수 있습니까? :) – Feyyaz

+0

좋은 질문입니다. 일반적으로 속성에 나열되어 있습니다. 이것이 어떻게 작동하는지 잘 모르겠습니다. –

1

마치 관리되지 않는 (아마도 COM) dll 호출입니다. 따라서 반사경은 디 컴파일/디스 어셈블 할 수 없습니다. 하지만 x86 어셈블러를 읽을 수 있다면 어딘가에 도착할 수 있습니다.

+0

+1 'DispId' 속성은 COM에 대해 공짜입니다 : – leppie

관련 문제