CoCreateInstance fails with 0x80029C4A (TYPE_E_CANTLOADLIBRARY) on
Vista
Hi,
I am using the ScriptControl from Microsoft (embedded in
msscript.ocx) to run javascript and VB-script from within my
framework in much the same way as in this article from the code
project:
http://www.codeproject.com/KB/COM/scriptdemo.aspx?display=PrintAll&fid=4239&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=1250951.
Everything have worked up until now when I tried to run the code on
Windows VISTA. For some reason the call to CoCreateInstance fails when
trying to create the ScriptControl object. The return code is
0x80029C4A which seems to mean TYPE_E_CANTLOADLIBRARY but that does
not help me very much. One more interesting thing is that the call
only fails when I use a multi threaded appartment (which,
unfortunately is the case I need).
The following simple application reproduces my problem:
#include "stdafx.h"
// Import Script Control type library.
#import "msscript.ocx" no_namespace
// Choose apartment model (STA/MTA)
//#define USE_STA
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM
HRESULT hr;
#ifdef USE_STA
hr = CoInitialize(0);
#else
hr = CoInitializeEx(0, COINIT_MULTITHREADED);
#endif
if (FAILED(hr))
return -1;
// Run test
try
{
// Trying to create the script control object
IScriptControlPtr pScript;
hr = pScript.CreateInstance(__uuidof(ScriptControl), NULL,
CLSCTX_ALL);
// Check result: This will fail on Windows VISTA with error code
0x80029C4A (TYPE_E_CANTLOADLIBRARY)
// when COINIT_MULTITHREADED is used.
_com_util::CheckError(hr);
// Print result
printf("Test successful.\n");
}
catch (_com_error&)
{
printf("Test failed.\n");
}
catch (...)
{
printf("Test failed.\n");
printf("Unexpected exception.\n");
}
// Clean up
CoUninitialize();
return 0;
}
Any ideas?
Thanks.