Vi писал(а):Если не трудно, дай две TLB для сравнения
Скомпилировал один и тот же код МИДЛ-ом и mktyplib-ом:
- Код: Выделить всё
{
typedef struct tegTEST {
long X;
} TEST;
typedef struct {
long X2;
} TEST2;
typedef struct TEST3 {
long X3;
} TEST3;
[uuid(4A6A2235-AFA1-498e-A00B-3E9040ED9BF9)]
typedef struct tegTEST4 {
long X4;
} TEST4;
[uuid(5A6A2235-AFA1-498e-A00B-3E9040ED9BF9)]
typedef struct {
long X5;
} TEST5;
[uuid(6A6A2235-AFA1-498e-A00B-3E9040ED9BF9)]
typedef struct TEST6 {
long X6;
} TEST6;
[dllname("lalala.dll")]
module m
{
[entry("m"), helpstring ("проверка декларации структур")]
void stdcall t (TEST A, TEST2 B, TEST3 C, TEST4 D, TEST5 E, TEST6 F);
};
}
MIDL при компиляции выдал предупреждение:
//midl\oleaut32.dll : warning MIDL2368 : error generating type library, ignored :
//Could not set UUID : tegTEST4
//midl\oleaut32.dll : warning MIDL2368 : error generating type library, ignored :
//Could not set UUID : __MIDL___MIDL_itf_testIDL_0000_0002
В мидл-овской тлб структуры TEST нет вообще, а в функции она задекларирована как tegTEST. Тем структурам, которым не были даны имена, мидл дал свои невидимые.
На мой взгляд, это неадекватно (хоть и описано в документации). Если я не дал имени структуре, то очевидно же, что мне оно не нужно. А если я дал структуре псевдоним, то он мне по меньшей мере нужен. И если даже некие невидимые сущности мне всё же нужны (хотя в данном случае - совершенно не представляю, зачем) - то логично, чтобы я сам и прописал их в коде. Собственно, одинаковые имя и псевдоним вполне решают проблему, но всё же это выглядит скорее как уловка.
odl, на мой взгляд скомпилировался вполне логично.