Article ID: 169928
Article Last Modified on 7/20/2005
if((x=MultiByteToWideChar(CP_ACP,0,path,-1,svalue,0)) != 1)
{
svalue = (OLECHAR*)malloc( x*sizeof(wchar_t) );
if(MultiByteToWideChar(CP_ACP, 0, path, -1, svalue, x ) == 0)
MessageBox( NULL, "Error in Conversion", "Multibytetowide", MB_OK );
}
else
svalue = L"";
MultiByteToWide counts the characters and determines the size of the buffer
needed to hold the BSTR. The appropriate size buffer is then allocated and
the conversion is done. In the example above svalue is an OLECHAR*, and
path is an LPSTR.
// Be sure to link with the following libraries:
// user32.lib uuid.lib oleaut32.lib ole32.lib
#define INITGUID
#include <windows.h>
#include <ocidl.h>
#include "ssauto.h"
int main () {
CLSID clsid;
IClassFactory *pClf;
IVSSDatabase *pVdb;
BSTR bstrPath = SysAllocString(L"c:\\VSSclient\\srcsafe.ini");
BSTR bstrUName = SysAllocString(L"guest");
BSTR bstrUPass = SysAllocString(L"");
CoInitialize(0);
if(S_OK == CLSIDFromProgID(L"SourceSafe", &clsid ))
{
if(S_OK == CoGetClassObject( clsid, CLSCTX_ALL, NULL,
IID_IClassFactory, (void**)&pClf ))
{
if(S_OK == pClf->CreateInstance( NULL, IID_IVSSDatabase,
(void **) &pVdb ))
{
if(S_OK == pVdb->Open(bstrPath, bstrUName, bstrUPass))
{
//Database Successfully Opened!
//Add code here to use the open database.
}
pVdb->Release();
}
pClf->Release();
}
}
CoUninitialize();
SysFreeString(bstrPath);
SysFreeString(bstrUName);
SysFreeString(bstrUPass);
return 0;
}
Keywords: kbhowto KB169928