2013-08-22 2 views
4

쿼리 할 특정/사용자 지정 인터페이스가있는 일부 DirectShow 필터 (COM)가 포함 된 .dll이 있습니다.제공되지 않을 때 COM + dll에서 IDL (TLB 용) 가져 오기

대부분의 타사 DirectShow 구성 요소에는 교차 환경 통신 (C# typelib 가져 오기)에 사용할 수있는 포함 된 .tlb 파일이 들어 있습니다.

idl/tlb 파일이 제공되지 않았기 때문에 수동으로 C#에 필요한 인터페이스를 만들지 않아야합니다.

COM .dll에서 tlb (또는 적어도 MIDL 컴파일 할 수있는 idl을 생성 할 수 있습니까?

+0

[tlbexp.exe]를 살펴 보자 (http://msdn.microsoft.com/en-us/library/hfzzah2c.aspx는) – paulsm4

+0

아닌가요 NET 어셈블리에만 해당됩니까? [ComVisible] –

+0

아니요, 혼잡 한 축구 경기장에서 도움을 청합니다. 어딘가에 프로그래머가있어 필요한 것을 정확히 제공 할 수 있습니다. 당신이 여기에서 그를 찾을 확률은 zilch입니다. 전화를 받고 전화를 겁니다. 그가 돕고 싶지 않다면 그것이 끝나는 곳입니다. –

답변

3

예, IDL (또는 매우 근접한 항목)을 리버스 엔지니어링하거나 디스 어셈블 할 수 있습니다. 당신이해야 할 것은 자신에게

#include "stdafx.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    return 0; 
} 

의 기본 코드를 제공하는 새로운 C++ 콘솔 프로젝트를 제공하고 당신은 #include 구문 아래 # import 문을 삽입합니다. 그래서 저는 C# 어셈블리를 COM Interop DLL로 작동하도록 마크 업했습니다. ComExample2라고 부르며, C++ 콘솔 프로젝트와 같은 솔루션에 있습니다. 이는 내가 추가 한 좋은 상대 경로 이름을 사용할 수 있음을 의미합니다. 그래서 # import 문은 다음과 같습니다.

#import "..\ComExample2\bin\Debug\ComExample2.tlb" no_namespace named_guids 

콘솔 응용 프로그램을 빌드합니다. 빌드하는 동안 생성 된 파일을 조사하면 형식 라이브러리 헤더를 나타내는 .TLH로 끝나는 파일을 찾을 수 있습니다. 따라서 내 경로는

..\ComExample2\ConsoleApplication1\Debug\comexample2.tlh 

내 안에 있습니다. 내 파일에는 idl과 매우 흡사합니다. 다음은이 모든 코드를 생성

struct __declspec(uuid("515b1b18-1602-4d42-b743-f1b3c458a0d0")) 
/* LIBID */ __ComExample2; 
struct /* coclass */ ComExampleClass2; 

// 
// Type library items 
// 

struct __declspec(uuid("713007fe-e74c-4fec-b91a-5ef8df279929")) 
IFoo : IDispatch 
{ 
    // 
    // Wrapper methods for error-handling 
    // 

    _bstr_t Greeting (); 
    long Sim (
     long a, 
     long b); 

    // 
    // Raw methods provided by interface 
    // 

     virtual HRESULT __stdcall raw_Greeting (
     /*[out,retval]*/ BSTR * pRetVal) = 0; 
     virtual HRESULT __stdcall raw_Sim (
     /*[in]*/ long a, 
     /*[in]*/ long b, 
     /*[out,retval]*/ long * pRetVal) = 0; 
}; 

struct __declspec(uuid("efe233b5-8ab3-4414-855e-1f027e0a72d5")) 
ComExampleClass2; 
    // interface _Object 
    // [ default ] interface IFoo 

당신에게 맛을 제공하기 위해 편집 한 조각이 .... 당신이 쉽게 COM 라이브러리에 대한 스크립트 C++ 코드를 할 수 있도록. 당신은 당신이 필요로하는 것을 골라야 만 할 것이지만, 그것으로 충분해야만합니다.

종류와 관련,

주 바텐

관련 문제