В прошлом проекте мы с Вами вынесли GUID в главный модуль. На самом деле в этом нет необходимости, так как GIUD конкретных провайдеров описаны в заголовочных файлах.
// OLE DB - ODBC провайдеры #include "msdaguid.h" #include "msdasql.h"
Вообщем-то для каждого провайдера нужен заголовочный файл. Для OLEDB - SQL свой, для OLEDB - ODBC свой и так далее. Внутри этих файлов описаны GUID:
.... #ifdef DBINITCONSTANTS EXTERN_C const OLEDBDECLSPEC GUID CLSID_OLEDB_ENUMERATOR = {0xc8b522d0L,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}}; EXTERN_C const OLEDBDECLSPEC GUID CLSID_EXTENDEDERRORINFO = {0xc8b522cfL,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}}; EXTERN_C const OLEDBDECLSPEC GUID CLSID_MSDAVTM = {0x0c733a8eL,0x2a1c,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}}; EXTERN_C const OLEDBDECLSPEC GUID CLSID_OLEDB_CONVERSIONLIBRARY= {0xc8b522d1L,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}}; EXTERN_C const OLEDBDECLSPEC GUID CLSID_OLEDB_ROWPOSITIONLIBRARY= {0x2048eee6l,0x7fa2,0x11d0,{0x9e,0x6a,0x00,0xa0,0xc9,0x13,0x8c,0x29}}; #else .....
Обратите внимание на константу DBINITCONSTANTS, так вот в зависимости от ее присутствия или отсутствия сборка проекта будет идти по разному. Если с ней поступить не правильно, то результат сборки проекта будет такой.
--------------------Configuration: Step4OLEDB - Win32 Debug-------------------- Compiling... StdAfx.cpp Compiling... Step4OLEDB.cpp Linking... Step4OLEDB.obj : error LNK2001: unresolved external symbol "struct _GUID const CLSID_MSDASQL" (?CLSID_MSDASQL@@3U_GUID@@B) Debug/Step4OLEDB.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. Step4OLEDB.exe - 2 error(s), 0 warning(s)
Так вот мало ее просто определить ее нужно определить правильно. Эта константа должна быть известна еще до компиляции основного модуля. Поэтому ее можно определить в двух местах. Первое это stdafx.h, вот так например.
...... #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #define DBINITCONSTANTS #include <stdio.h> // TODO: reference additional headers your program requires here ......
Так же эту константу можно установить в свойствах проекта Preprocessor definitions: