Что интересно, IActiveScript линкер видит, а на IID_IActiveScriptParse ругается, что мол unresolved external.
Причем без разницы, писать ли IID_IActiveScriptParse, или IID_IActiveScriptParse32 (первое задефайнено как второе в activscp.h).
Ошибка такая возникает в Borland C++ Builder 6.0. В VC++ 2003 всё замечательно компилируется.
Что я делаю не так?
JM>Что интересно, IActiveScript линкер видит, а на IID_IActiveScriptParse ругается, что мол unresolved external. JM>Причем без разницы, писать ли IID_IActiveScriptParse, или IID_IActiveScriptParse32 (первое задефайнено как второе в activscp.h). JM>Ошибка такая возникает в Borland C++ Builder 6.0. В VC++ 2003 всё замечательно компилируется. JM>Что я делаю не так?
// macros to define byte pattern for a GUID.
// Example: DEFINE_GUID(GUID_XXX, a, b, c, ...);
//
// Each dll/exe must initialize the GUIDs once. This is done in one of
// two ways. If you are not using precompiled headers for the file(s) which
// initializes the GUIDs, define INITGUID before including compobj.h. This
// is how OLE builds the initialized versions of the GUIDs which are included
// in ole2.lib. The GUIDs in ole2.lib are all defined in the same text
// segment GUID_TEXT.
//
// The alternative (which some versions of the compiler don't handle properly;
// they wind up with the initialized GUIDs in a data, not a text segment),
// is to use a precompiled version of compobj.h and then include initguid.h
// after compobj.h followed by one or more of the guid defintion files.
Йе-е-е-е-е-е!
#define INITGUID спасло отца русской демократии!
Спасибо, блин, большое! Большое, блин, спасибо! (с)...
Я вот только одного не пойму, а чем же отличаются IID_IActiveScript и IID_IActiveScriptParse32...
Потому как объявляются они в одном месте... Рыдышком... В хидере... Странненько.
Здравствуйте, JustMoose, Вы писали:
JM>Я вот только одного не пойму, а чем же отличаются IID_IActiveScript и IID_IActiveScriptParse32... JM>Потому как объявляются они в одном месте... Рыдышком... В хидере... Странненько.
Это GUIDы двух различных интерфейсов, поэтому они и различны. А что странного в этом?
Здравствуйте, Vi2, Вы писали:
Vi2>Это GUIDы двух различных интерфейсов, поэтому они и различны. А что странного в этом?
Странно то, что линкер видет только один из них... По крайней мере, пока не будут произведены танцы с бубнами, в виде задефайневания INITGUID.
Я ещё могу понять, если бы эти два IID жили в разных частях хидера, и один из них был бы завернут в какой-нибудь хитрый ifndef. Но нет. Между ними нет никакой разницы, не считая численного значения
Эх... Решение найдено, а понимание не пришло. Ну и ладно.
Здравствуйте, JustMoose, Вы писали:
JM>Странно то, что линкер видет только один из них... По крайней мере, пока не будут произведены танцы с бубнами, в виде задефайневания INITGUID. JM>Я ещё могу понять, если бы эти два IID жили в разных частях хидера, и один из них был бы завернут в какой-нибудь хитрый ifndef. Но нет. Между ними нет никакой разницы, не считая численного значения
Наверное, линкер грузит некий объектный файл, в котором определен IID_IActiveScript и не определен IID_IActiveScriptParse. Без INITGUID это не зависит от хидеров твоего проекта — они оба объявляются внешними.