2009-07-17 5 views
0

idl 파일에서 생성 된 추상 인터페이스를 상속하는 객체가 여러 개 있습니다. 이러한 인터페이스를 사용하는 각 객체는 idl 인터페이스에 매핑되는 모든 C++ 생성 추상 클래스를 포함하는 동일한 파일 interfaces.h를 포함합니다.거기 midl 별도의 각 인터페이스를 생성하는 방법입니다.

interfaces.idl을 변경할 때마다 interfaces.h 변경 이후이 클래스에 의존하는 모든 클래스를 다시 빌드해야합니다. midl에게 각 추상 클래스를 자체적으로 생성하도록 플래그 또는 무언가가 있습니까?

답변

1

내가 생각할 수있는 유일한 방법은 각 인터페이스를 자체 IDL 파일에 넣거나 변화율에 따라 여러 IDL로 나누는 것입니다.

그런 다음 필요한 경우 인터페이스 IDL을 기본 라이브러리 IDL에 포함 (또는 # import - 잊어 버렸습니다)하면 유형 라이브러리가 생성됩니다.

+0

응용 프로그램 내부의 egype typelib. 각각에 대해 별도의 라이브러리를 추가하는 것은 고통 스러울 것입니다. Midl에는 .h를 분할하는 데 필요한 모든 것이 있습니다. 누군가가 나에게 마법 도구의 마술 깃발을 달아 줄 것을 기대했습니다. –

+1

하나의 유형 라이브러리 만 있으면됩니다. 각 인터페이스 IDL을 포함하고 라이브러리 블록을 포함하는 하나의 마스터 IDL이 있어야합니다. 그것은 당신을 위해 작동하지 않습니까? –

+0

나는 더 조심스럽게 읽어야했는데, 이것이 내가 필요한 것입니다. 감사. –

1

여기에 별도의 .h 파일과 단일 형식 라이브러리를 생성하기 위해 idl을 구성하는 방법에 대한 샘플이 나와 있습니다. 올바른 지시어는 가져 오기입니다.

main.idl

import "oaidl.idl"; 
import "ocidl.idl"; 

import "frag1.idl"; 
import "frag2.idl"; 

[ 
    uuid(1BECE2AF-2792-49b9-B133-BBC89C850D6F), 
    version(1.0), 
    helpstring("Bibliothèque de types") 
] 
library Library 
{ 
    importlib("stdole2.tlb"); 

    interface IFrag1; 
    interface IFrag2; 
} 

frag1.idl

import "oaidl.idl"; 
import "ocidl.idl"; 

[ 
    object, 
    uuid(9AEB517B-48B9-4628-8DD3-4A0BA8D39BEF), 
    dual, 
    nonextensible, 
    helpstring("Interface IFrag1"), 
    pointer_default(unique) 
] 
interface IFrag1 : IDispatch { 
    HRESULT frag1(); 
}; 

frag2.idl 내가 int로하기 때문에 할 매우 쉽게 할 수 있지만이 아니다

import "oaidl.idl"; 
import "ocidl.idl"; 

[ 
    object, 
    uuid(D60835D4-E1B1-40fb-B583-A75373EF15BE), 
    dual, 
    nonextensible, 
    helpstring("Interface IFrag2"), 
    pointer_default(unique) 
] 
interface IFrag2 : IDispatch { 
    HRESULT frag2(); 
}; 
관련 문제