Всем добрый день!
Уважаемые коллеги, подскажите, пожалуйста, возможное разрешение проблемы.
В проекте используется низкоуровневый компонент-обертка над ADO из
проекта Duwamish —
db3vbdal.dll (Duwamish Books, Phase 3),
ребята из этой группы разработали компонент еще под Visual Basic 6.0 с учетом ADO 2.0
(заполучить библиотеку и исходники в можно в комплекте с MSDN "April 2001",
либо пишите мне мылом, вышлю)
У нас этот компонент использовался для компонента бизнес-логики таким образом:
//....
import "helper.idl";//для ADO
[
object,
uuid(3A4F53E2-DCBF-11D6-9C21-0000B4A6D518),
helpstring("IBLogic Interface"),
pointer_default(unique)
]
interface IBLogic : IUnknown
{
[helpstring("method InsertSomething")]
HRESULT InsertSomething([in, out] _Recordset **ppNewSomething,
[out, retval] VARIANT_BOOL *pbSuccess);
//и т.д.
}
[
uuid(8E9082D5-9CCE-4E35-9596-FE7EC7CD5981),
version(1.0),
helpstring("BLogic 1.0 Type Library")
]
library BLogicLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(3A4F53E3-DCBF-11D6-9C21-0000B4A6D518),
helpstring("BusinessLogic Class")
]
coclass BLogic
{
[default] interface IBLogic;
};
};
В файле stdafx.h мы подключали библиотеку ADO так;
//....
#import <msado15.dll> no_namespace named_guids \
rename("EOF", "adoEOF") rename("Recordset", "adoRecordset")
И следом подключали библиотеку из проекта Duwamish;
#import "/*путь*/db3vbdal.dll" no_namespace named_guids rename("EOF", "EndOfFile")
...компилируем...
Далее, следовал
_третий_ уровень в нашей модели,
а именно создание компонента с подключением в нем библиотеки BLogicLib.
Код его, сейчас, уже не имеет значения, важно что в stdafx.h мы подключали нашу библиотеку так;
#import "/*путь*/BLogic.dll" no_namespace named_guids rename("EOF", "adoEOF")
Совсем недавно понадобилось мне кое-что переписать в проекте на VC.NET и
при этом, во время компиляции компанюги
_третьего_ уровня, выскочили ошибки;
/*путь*/BLogic.tlh: error C2146: syntax error : missing ';' before identifier 'PositionEnum_Param'
/*путь*/BLogic.tlh: error C2501: 'PositionEnum_Param' : missing storage-class or type specifiers
/*путь*/BLogic.tlh: error C2371: 'PositionEnum' : redefinition; different basic types
/*путь*/BLogic.tlh: error C2146: syntax error : missing ';' before identifier 'AbsolutePosition'
и еще 38 подобных ругательств компилятора на 'PositionEnum_Param' в файле BLogic.tlh (!)
В самом файле tlh строка преткновения выглядит так;
....
typedef PositionEnum PositionEnum_Param;
typedef enum __MIDL___MIDL_itf_BLogic_0253_0013 PositionEnum;
....
Как я не пытался возиться с директивами #import, ничего не вышло...
Почему компилятор или midl не может разобраться со своими кросс-определениями, непонятно...
В приступе уныния написал в stdafx.h так;
typedef enum __MIDL___MIDL_itf_BLogic_0253_0013 PositionEnum;
#import "/*путь*/BLogic.dll" no_namespace named_guids rename("EOF", "adoEOF")
всё скопмоновалось, но это ведь неправильно?