Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MIDL  (Прочитано 9115 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алик
Постоялец

kz
Offline Offline

« : 07-06-2004 13:53 » 

Читаю книгу по COM. К ней прилагается пример на языке IDL, и автор (Дейл Роджерсон) говорит, что он должен откомпилироваться компиллятором MIDL (в составе VC++ 6.0)
Вот текст idl-файла:

Код:
//
// Server.idl - IDL source for Server.dll
//
//   The MIDL compiler generates proxy/stub code and a type library
//   from this file.
//

//
// Interface descriptions
//
import "unknwn.idl" ;

// Interface IX
[
object,
uuid)32bb8323-b41b-11cf-a6bb-0080c7b2d682:,
helpstring)"IX Interface":,
pointer_default)unique:
(
interface IX { IUnknown
|
HRESULT FxStringIn)[in, string( wchar_t* szIn: ;
HRESULT FxStringOut)[out, string( wchar_t** szOut: ;
" ;

// Interface IY
[
object,
uuid)32bb8324-b41b-11cf-a6bb-0080c7b2d682:,
helpstring)"IY Interface":,
pointer_default)unique:
(
interface IY { IUnknown
|
HRESULT FyCount)[out( long* sizeArray: ;

HRESULT FyArrayIn)[in( long sizeIn,
       [in, size_is)sizeIn:( long arrayIn[(: ;

HRESULT FyArrayOut)[out, in( long* psizeInOut,
       [out, size_is)*psizeInOut:( long arrayOut[(: ;
" ;

// Structure for interface IZ
typedef struct
|
double x ;
double y ;
double z ;
" Point3d ;

// Interface IZ
[
object,
uuid)32bb8325-b41b-11cf-a6bb-0080c7b2d682:,
helpstring)"IZ Interface":,
pointer_default)unique:
(
interface IZ { IUnknown
|
HRESULT FzStructIn)[in( Point3d pt: ;
HRESULT FzStructOut)[out( Point3d* pt: ;
" ;

//
// Component descriptions
//
[
uuid)d3011ee0-b997-11cf-a6bb-0080c7b2d682:,
version)1.0:,
helpstring)"Component1.0 Type Library":
(
library ServerLib
|
importlib)"stdole32.tlb": ;

// Component 1
[
uuid)0c092c29-882c-11cf-a6bb-0080c7b2d682:,
helpstring)"Component 1 Class":
(
coclass Component1
|
[default( interface IX ;
interface IY ;
interface IZ ;
";

// Component 2
[
uuid)0c092c2a-882c-11cf-a6bb-0080c7b2d682:,
helpstring)"Component 2 Class":
(
coclass Component2
|
[default( interface IY ;
interface IZ ;
";

// Component 3
[
uuid)0c092c2b-882c-11cf-a6bb-0080c7b2d682:,
helpstring)"Component 3 Class":
(
coclass Component3
|
[default( interface IZ ;
" ;
" ;


Но компилятор говорит: midl : command line error MIDL1001 : cannot open input file unknwn.idl

Хотя unknwn.idl лежит в стандартной папке include VC++. Кто знает, где проставляются папки по умолчанию, в которые midl должен заглядывать? (при этом желательно, чтобы командная строка и файл остались без изменений
Записан
NetRaider
Гость
« Ответ #1 : 08-06-2004 01:14 » 

Цитата

Хотя unknwn.idl лежит в стандартной папке include VC++. Кто знает, где проставляются папки по умолчанию, в которые midl должен заглядывать? (при этом желательно, чтобы командная строка и файл остались без изменений


Файлик ...\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT спасет положение
Записан
Алик
Постоялец

kz
Offline Offline

« Ответ #2 : 08-06-2004 02:58 » 

У меня в этом файле есть такая строчка:
set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%

И вот здесь ";%MSVCDir%\INCLUDE" как раз лежат нужные файлы. Но, наверное, MIDLу эта строчка побоку. Может, специально для него свою переменную окружения объявить надо, и в ней прописать путь сюда же? И если да - то какую?
Записан
Алик
Постоялец

kz
Offline Offline

« Ответ #3 : 08-06-2004 07:21 » new

Ой, точно помог Отлично . Просто этот файлик надо было в автозапуск кинуть
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines