DOCUMENT:Q264526 19-JUL-2001 [sna] TITLE :Snaoledb.dll Init Fails with CoInitializeEx Multithreaded PRODUCT :Microsoft SNA Server PROD/VER:WINDOWS:4.0,4.0 SP1,4.0 SP2,4.0 SP3 OPER/SYS: KEYWORDS:kbSNA400sp4fix kbSNA400PreSP4fix ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft SNA Server, versions 4.0, 4.0 SP1, 4.0 SP2, 4.0 SP3 - Microsoft OLE DB Provider for AS/400 and VSAM, versions 4.0 SP2, 4.0 SP3 ------------------------------------------------------------------------------- SYMPTOMS ======== If an application thread calls the CoInitializeEx(NULL, CO_MULTITHREADED) function on a Windows NT 4.0-based computer, the thread may receive the following error message when it attempts to initialize the OLE DB Provider for AS/400 and VSAM: Initialization of the dynamic link library e:\program files\sna\system\snaoledb failed. The process is terminating abnormally. This problem does not occur on Windows 2000-based computers, or if Apartment threading is requested. NOTE: Even though the OLE DB Provider for AS/400 and VSAM only supports the Apartment-threading model (as documented in the SNA Server SDK online Help topic "Programming Considerations Using the OLE DB Provider for AS/400 and VSAM"), the application calling the thread must still be able to initialize the COM interface using the Multithreaded option. CAUSE ===== The OLE DB Provider for AS/400 and VSAM is incorrectly calling OleInitialize, requiring the calling thread to request Apartment threading. RESOLUTION ========== To resolve this problem, obtain the latest service pack for SNA Server 4.0. For additional information, please see the following article in the Microsoft Knowledge Base: Q215838 How to Obtain the Latest SNA Server Version 4.0 Service Pack WORKAROUND ========== If possible, initialize the thread using the Apartment-threading model: Call CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) -OR- Call CoInitialize(NULL) STATUS ====== Microsoft has confirmed this to be a problem in Microsoft SNA Server version 4.0, 4.0 SP1, 4.0 SP2 and 4.0 SP3. This problem was first corrected in SNA Server 4.0 Service Pack 4. MORE INFORMATION ================ The following sample program can be used to reproduce this problem. In this sample, the error message occurs when Initialize() is called: #define DBINITCONSTANTS #define INITGUID #define _WIN32_DCOM #include #include #include #include #include #include #include int main () { HRESULT hr = S_OK; IDataInitialize *pIDataInitialize = NULL; IDBInitialize *pIDBInitialize = NULL; LPOLESTR pwszFileName = SysAllocString (OLESTR("c:\\thor.udl")); LPOLESTR ppwszInitializationString; hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); assert (hr == S_OK); hr = CoCreateInstance(CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER, IID_IDataInitialize, reinterpret_cast(&pIDataInitialize)); hr = pIDataInitialize->LoadStringFromStorage(pwszFileName, &ppwszInitializationString); hr = pIDataInitialize->GetDataSource(NULL,CLSCTX_INPROC_SERVER, ppwszInitializationString, IID_IDBInitialize, (IUnknown **)(&pIDBInitialize)); hr = pIDBInitialize->Initialize(); SysFreeString (pwszFileName); SysFreeString (ppwszInitializationString); hr = pIDBInitialize->Release (); CoUninitialize( ); return 0; } NOTE: When you build the project above, make sure to link with the multithreaded Microsoft C Runtime Library and Msdasc.lib. Additional query words: ====================================================================== Keywords : kbSNA400sp4fix kbSNA400PreSP4fix Technology : kbAudDeveloper kbOLEDBSearch kbSNAServSearch kbOLEDBProvAS400VSAM400SP2 kbOLEDBProvAS400VSAM400SP3 kbSNAServ400 kbSNAServ400SP1 kbSNAServ400SP2 kbSNAServ400SP3 kbOLEDBProvSearch Version : WINDOWS:4.0,4.0 SP1,4.0 SP2,4.0 SP3 Issue type : kbbug Solution Type : kbfix ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.