shell: use Unicode on Windows

Change-Id: I9f7962db320f8832879ba327108425a7592b4b77
Reviewed-on: https://gerrit.libreoffice.org/42885
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski
2017-09-27 14:20:25 +03:00
parent 09917566b6
commit e80aef4e03
35 changed files with 300 additions and 264 deletions

View File

@ -28,6 +28,7 @@
#include "xml_parser.hxx"
#include "zipfile.hxx"
#include <filepath.hxx>
class CBaseReader : public i_xml_parser_event_handler
{
@ -35,7 +36,7 @@ public:
virtual ~CBaseReader() override;
protected: // protected because its only an implementation relevant class
CBaseReader( const std::string& DocumentName );
CBaseReader( const Filepath_t& DocumentName );
CBaseReader( StreamInterface *stream );

View File

@ -22,6 +22,7 @@
#include "basereader.hxx"
#include <stack>
#include <filepath.hxx>
class ITag;
class StreamInterface;
@ -31,7 +32,7 @@ class CContentReader : public CBaseReader
public:
virtual ~CContentReader() override;
CContentReader( const std::string& DocumentName, LocaleSet_t const & DocumentLocale );
CContentReader( const Filepath_t& DocumentName, LocaleSet_t const & DocumentLocale );
CContentReader( StreamInterface* stream, LocaleSet_t const & DocumentLocale );

View File

@ -23,6 +23,7 @@
#include "global.hxx"
#include <string>
#include <filepath.hxx>
// A simple table with information about the currently used OO file extensions
// for instance ".sxw" and information about windows registry keys which are
@ -34,20 +35,19 @@
*/
struct FileExtensionEntry
{
const char* ExtensionAnsi; // e.g. ".sxw"
const wchar_t* ExtensionUnicode; // e.g. L".sxw"
const char* RegistryForwardKey; // e.g. "soffice.StarWriterDocument.6"
const char* ExtensionA; // e.g. ".sxw"
const wchar_t* ExtensionU; // e.g. L".sxw"
const wchar_t* RegistryForwardKey; // e.g. "soffice.StarWriterDocument.6"
};
extern const FileExtensionEntry OOFileExtensionTable[];
extern const size_t OOFileExtensionTableSize;
/** Return the extension of a file
name without the '.'
*/
std::string get_file_name_extension(const std::string& file_name);
Filepath_t get_file_name_extension(const Filepath_t& file_name);
/** Return the type of a file
@ -55,7 +55,7 @@ std::string get_file_name_extension(const std::string& file_name);
enum File_Type_t { UNKNOWN, WRITER, CALC, DRAW, IMPRESS, MATH, WEB, DATABASE };
File_Type_t get_file_type(const std::string& file_name);
File_Type_t get_file_type(const Filepath_t& file_name);
#endif

29
shell/inc/filepath.hxx Normal file
View File

@ -0,0 +1,29 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef INCLUDED_SHELL_INC_INTERNAL_FILEPATH_HXX
#define INCLUDED_SHELL_INC_INTERNAL_FILEPATH_HXX
// typedefs to allow using Unicode paths on Windows
#include <string>
#if defined _WIN32
typedef wchar_t Filepath_char_t;
typedef std::wstring Filepath_t;
#else
typedef char Filepath_char_t;
typedef std::string Filepath_t;
#endif
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -30,6 +30,7 @@
#pragma warning(pop)
#endif
#include <string>
#include <filepath.hxx>
class CInfoTip : public IQueryInfo, public IPersistFile
{
@ -84,9 +85,9 @@ public:
/* [out] */ LPOLESTR __RPC_FAR *ppszFileName) override;
private:
long m_RefCnt;
char m_szFileName[MAX_PATH];
std::wstring m_FileNameOnly;
long m_RefCnt;
Filepath_char_t m_szFileName[MAX_PATH];
std::wstring m_FileNameOnly;
};
#endif

View File

@ -23,6 +23,7 @@
#include "basereader.hxx"
#include "types.hxx"
#include <stack>
#include <filepath.hxx>
class ITag;
class CKeywordsTag;
@ -34,7 +35,7 @@ class CMetaInfoReader : public CBaseReader
public:
virtual ~CMetaInfoReader() override;
CMetaInfoReader( const std::string& DocumentName );
CMetaInfoReader( const Filepath_t& DocumentName );
CMetaInfoReader( StreamInterface* stream );

View File

@ -31,6 +31,7 @@
#endif
#include <string>
#include <memory>
#include <filepath.hxx>
class CPropertySheet : public IShellExtInit, public IShellPropSheetExt
{
@ -80,7 +81,7 @@ private:
private:
long m_RefCnt;
char m_szFileName[MAX_PATH];
Filepath_char_t m_szFileName[MAX_PATH];
};
#endif

View File

@ -32,30 +32,31 @@
#pragma warning(pop)
#endif
#include <string>
#include <filepath.hxx>
/** Sets a value of the specified registry key, an empty ValueName sets the default
value
Returns true on success
*/
bool SetRegistryKey(HKEY RootKey, const char* KeyName, const char* ValueName, const char* Value);
bool SetRegistryKey(HKEY RootKey, const Filepath_char_t* KeyName, const Filepath_char_t* ValueName, const Filepath_char_t* Value);
/** Deletes the specified registry key and all of its subkeys
Returns true on success
*/
bool DeleteRegistryKey(HKEY RootKey, const char* KeyName);
bool DeleteRegistryKey(HKEY RootKey, const Filepath_char_t* KeyName);
/** May be used to determine if the specified registry key has subkeys
The function returns true on success else if an error occurs false
*/
bool HasSubkeysRegistryKey(HKEY RootKey, const char* KeyName, bool& bResult);
bool HasSubkeysRegistryKey(HKEY RootKey, const Filepath_char_t* KeyName, bool& bResult);
/** Converts a GUID to its string representation
*/
std::string ClsidToString(const CLSID& clsid);
Filepath_t ClsidToString(const CLSID& clsid);
/** Get the content of a specific key.
*/
bool QueryRegistryKey(HKEY RootKey, const char* KeyName, const char* ValueName, char *pszData, DWORD dwBufLen);
bool QueryRegistryKey(HKEY RootKey, const Filepath_char_t* KeyName, const Filepath_char_t* ValueName, Filepath_char_t *pszData, DWORD dwBufLen);
#endif

View File

@ -21,6 +21,7 @@
#define INCLUDED_SHELL_INC_INTERNAL_STREAM_HELPER_HXX
#include "types.hxx"
#include <filepath.hxx>
struct IStream;
@ -39,7 +40,7 @@ private:
class FileStream : public StreamInterface
{
public:
FileStream(const char *filename);
FileStream(const Filepath_char_t *filename);
~FileStream() override;
unsigned long sread (unsigned char *buf, unsigned long size) override;
long stell () override;

View File

@ -92,18 +92,18 @@ LCID LocaleSetToLCID( const LocaleSet_t & Locale );
#ifdef DEBUG
inline void OutputDebugStringFormatA( LPCSTR pFormat, ... )
inline void OutputDebugStringFormatW( LPCWSTR pFormat, ... )
{
CHAR buffer[1024];
WCHAR buffer[1024];
va_list args;
va_start( args, pFormat );
StringCchVPrintfA( buffer, sizeof(buffer), pFormat, args );
StringCchVPrintfW( buffer, sizeof(buffer)/sizeof(*buffer), pFormat, args );
va_end( args );
OutputDebugStringA( buffer );
OutputDebugStringW( buffer );
}
#else
static inline void OutputDebugStringFormatA( LPCSTR, ... )
static inline void OutputDebugStringFormatW( LPCWSTR, ... )
{
}
#endif

View File

@ -25,6 +25,7 @@
#include <string>
#include <vector>
#include <memory>
#include <filepath.hxx>
class StreamInterface;
@ -34,7 +35,6 @@ class StreamInterface;
class ZipFile
{
public:
typedef std::vector<std::string> Directory_t;
typedef std::unique_ptr<Directory_t> DirectoryPtr_t;
typedef std::vector<char> ZipContentBuffer_t;
@ -54,7 +54,7 @@ public:
IOException if the specified file doesn't exist
AccessViolationException if read access to the file is denied
*/
static bool IsZipFile(const std::string &FileName);
static bool IsZipFile(const Filepath_t &FileName);
static bool IsZipFile(void *stream);
@ -74,7 +74,7 @@ public:
IOException if the specified file doesn't exist or is no zip file
AccessViolationException if read access to the file is denied
*/
static bool IsValidZipFileVersionNumber(const std::string &FileName);
static bool IsValidZipFileVersionNumber(const Filepath_t &FileName);
static bool IsValidZipFileVersionNumber(void *stream);
@ -92,7 +92,7 @@ public:
WrongZipVersionException if the zip file cannot be uncompressed
with the used zlib version
*/
ZipFile(const std::string &FileName);
ZipFile(const Filepath_t &FileName);
ZipFile(StreamInterface *stream);

View File

@ -42,7 +42,7 @@ using namespace std;
class Test : public CppUnit::TestFixture
{
private:
string documentName;
wstring documentName;
LPSTREAM pStream;
public:
Test();
@ -66,16 +66,16 @@ CPPUNIT_TEST_SUITE_REGISTRATION(Test);
Test::Test() : documentName(), pStream(nullptr)
{
const char* pSrcRoot = getenv( "SRC_ROOT" );
const wchar_t* pSrcRoot = _wgetenv(L"SRC_ROOT");
if (pSrcRoot)
{
documentName.append(pSrcRoot);
documentName.append("/");
documentName.append(L"/");
}
documentName.append("shell/qa/zip/simpledocument.odt");
documentName.append(L"shell/qa/zip/simpledocument.odt");
// Create an IStream pointer from the file
HANDLE hFile = CreateFileA(documentName.c_str(), GENERIC_READ, 0, nullptr, OPEN_EXISTING, 0, nullptr);
HANDLE hFile = CreateFileW(documentName.c_str(), GENERIC_READ, 0, nullptr, OPEN_EXISTING, 0, nullptr);
DWORD dwFileSize = GetFileSize(hFile, nullptr);
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);

View File

@ -44,17 +44,17 @@
css::beans::Optional<css::uno::Any> ImplGetLocale(LCID lcid)
{
CHAR buffer[8];
PSTR cp = buffer;
WCHAR buffer[8];
PWSTR cp = buffer;
cp += GetLocaleInfoA( lcid, LOCALE_SISO639LANGNAME , buffer, 4 );
cp += GetLocaleInfoW( lcid, LOCALE_SISO639LANGNAME, buffer, 4 );
if( cp > buffer )
{
if( 0 < GetLocaleInfoA( lcid, LOCALE_SISO3166CTRYNAME, cp, buffer + 8 - cp) )
if( 0 < GetLocaleInfoW( lcid, LOCALE_SISO3166CTRYNAME, cp, buffer + 8 - cp) )
// #i50822# minus character must be written before cp
*(cp - 1) = '-';
return {true, css::uno::Any(OUString::createFromAscii(buffer))};
return {true, css::uno::Any(OUString(SAL_U(buffer)))};
}
return {false, {}};

View File

@ -35,7 +35,7 @@
#pragma warning(pop)
#endif
#define WININET_DLL_NAME "wininet.dll"
#define WININET_DLL_NAME L"wininet.dll"
#define EQUAL_SIGN '='
#define COLON ':'
#define SPACE ' '
@ -102,14 +102,14 @@ namespace
WinInetBackend::WinInetBackend()
{
Library hWinInetDll( LoadLibrary( WININET_DLL_NAME ) );
Library hWinInetDll( LoadLibraryW( WININET_DLL_NAME ) );
if( hWinInetDll.module )
{
typedef BOOL ( WINAPI *InternetQueryOption_Proc_T )( HINTERNET, DWORD, LPVOID, LPDWORD );
InternetQueryOption_Proc_T lpfnInternetQueryOption =
reinterpret_cast< InternetQueryOption_Proc_T >(
GetProcAddress( hWinInetDll.module, "InternetQueryOptionA" ) );
GetProcAddress( hWinInetDll.module, "InternetQueryOptionW" ) );
if (lpfnInternetQueryOption)
{
// Some Windows versions would fail the InternetQueryOption call
@ -120,7 +120,7 @@ WinInetBackend::WinInetBackend()
// reallocation:
INTERNET_PROXY_INFO pi;
LPINTERNET_PROXY_INFO lpi = &pi;
DWORD dwLength = sizeof (INTERNET_PROXY_INFO);
DWORD dwLength = sizeof (pi);
BOOL ok = lpfnInternetQueryOption(
nullptr,
INTERNET_OPTION_PROXY,
@ -165,8 +165,10 @@ WinInetBackend::WinInetBackend()
// an empty proxy list, so we don't have to check if
// proxy is enabled or not
OUString aProxyList = OUString::createFromAscii( lpi->lpszProxy );
OUString aProxyBypassList = OUString::createFromAscii( lpi->lpszProxyBypass );
// We use a W-version of InternetQueryOption; it returns struct with pointers to wide strings
// There's no INTERNET_PROXY_INFOW, so we simply cast returned struct's members
OUString aProxyList = reinterpret_cast<const sal_Unicode*>( lpi->lpszProxy );
OUString aProxyBypassList = reinterpret_cast<const sal_Unicode*>( lpi->lpszProxyBypass );
// override default for ProxyType, which is "0" meaning "No proxies".
valueProxyType_.IsPresent = true;

View File

@ -30,19 +30,19 @@
typedef HRESULT (__stdcall *lpfnDllRegisterServer)();
typedef HRESULT (__stdcall *lpfnDllUnregisterServer)();
bool IsUnregisterParameter(const char* Param)
bool IsUnregisterParameter(const wchar_t* Param)
{
return ((0 == _stricmp(Param, "/u")) ||
(0 == _stricmp(Param, "-u")));
return ((0 == _wcsicmp(Param, L"/u")) ||
(0 == _wcsicmp(Param, L"-u")));
}
int main(int argc, char* argv[])
int wmain(int argc, wchar_t* argv[])
{
HMODULE hmod;
if (2 == argc)
{
hmod = LoadLibraryA(argv[1]);
hmod = LoadLibraryW(argv[1]);
if (hmod)
{
@ -57,7 +57,7 @@ int main(int argc, char* argv[])
}
else if (3 == argc && IsUnregisterParameter(argv[1]))
{
hmod = LoadLibraryA(argv[2]);
hmod = LoadLibraryW(argv[2]);
if (hmod)
{

View File

@ -297,8 +297,8 @@ void SAL_CALL CSysShExec::execute( const OUString& aCommand, const OUString& aPa
ZeroMemory(&sei, sizeof( sei));
sei.cbSize = sizeof(sei);
sei.lpFile = reinterpret_cast<LPCWSTR>(preprocessed_command.getStr());
sei.lpParameters = reinterpret_cast<LPCWSTR>(aParameter.getStr());
sei.lpFile = SAL_W(preprocessed_command.getStr());
sei.lpParameters = SAL_W(aParameter.getStr());
sei.nShow = SW_SHOWNORMAL;
if (NO_SYSTEM_ERROR_MESSAGE & nFlags)

View File

@ -26,7 +26,7 @@
/** constructor of CBaseReader.
*/
CBaseReader::CBaseReader(const std::string& DocumentName):
CBaseReader::CBaseReader(const std::wstring& DocumentName):
m_ZipFile( DocumentName )
{
}

View File

@ -26,7 +26,7 @@
/** constructor.
*/
CContentReader::CContentReader( const std::string& DocumentName, LocaleSet_t const & DocumentLocale ):
CContentReader::CContentReader( const std::wstring& DocumentName, LocaleSet_t const & DocumentLocale ):
CBaseReader( DocumentName )
{
try

View File

@ -26,7 +26,7 @@
/** constructor.
*/
CMetaInfoReader::CMetaInfoReader( const std::string& DocumentName ):
CMetaInfoReader::CMetaInfoReader( const std::wstring& DocumentName ):
CBaseReader( DocumentName )
{
try

View File

@ -45,7 +45,7 @@ bool IsOOFileExtension(wchar_t const * Extension)
{
for (size_t i = 0; i < OOFileExtensionTableSize; i++)
{
if (0 == _wcsicmp(Extension, OOFileExtensionTable[i].ExtensionUnicode))
if (0 == _wcsicmp(Extension, OOFileExtensionTable[i].ExtensionU))
return true;
}
@ -139,7 +139,7 @@ HRESULT STDMETHODCALLTYPE CColumnInfo::GetItemData(LPCSHCOLUMNID pscid, LPCSHCOL
{
std::wstring fname = getShortPathName( std::wstring( pscd->wszFile ) );
CMetaInfoReader meta_info_accessor(WStringToString(fname));
CMetaInfoReader meta_info_accessor(fname);
VariantClear(pvarData);

View File

@ -101,23 +101,23 @@ ULONG STDMETHODCALLTYPE CInfoTip::Release()
/** get file type information from registry.
*/
std::wstring getFileTypeInfo(const std::string& file_extension)
std::wstring getFileTypeInfo(const std::wstring& file_extension)
{
char extKeyValue[MAX_STRING];
char typeKeyValue[MAX_STRING];
::std::string sDot(".");
if (QueryRegistryKey(HKEY_CLASSES_ROOT, (sDot.append(file_extension)).c_str(), "", extKeyValue, MAX_STRING))
if (QueryRegistryKey( HKEY_CLASSES_ROOT, extKeyValue, "",typeKeyValue, MAX_STRING))
return StringToWString(typeKeyValue);
wchar_t extKeyValue[MAX_STRING];
wchar_t typeKeyValue[MAX_STRING];
::std::wstring sDot(L".");
if (QueryRegistryKey(HKEY_CLASSES_ROOT, (sDot.append(file_extension)).c_str(), L"", extKeyValue, MAX_STRING))
if (QueryRegistryKey( HKEY_CLASSES_ROOT, extKeyValue, L"",typeKeyValue, MAX_STRING))
return typeKeyValue;
return EMPTY_STRING;
}
/** get file size.
*/
DWORD getSizeOfFile( char const * FileName )
DWORD getSizeOfFile( wchar_t const * FileName )
{
HANDLE hFile = CreateFile(StringToWString(FileName).c_str(), // open file
HANDLE hFile = CreateFileW(FileName, // open file
GENERIC_READ, // open for reading
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, // share for all operations
nullptr, // no security
@ -178,7 +178,7 @@ std::wstring formatSizeOfFile( DWORD dwSize )
/** get file size information.
*/
std::wstring getFileSizeInfo(char const * FileName)
std::wstring getFileSizeInfo(wchar_t const * FileName)
{
DWORD dwSize=getSizeOfFile(FileName);
if (dwSize != INVALID_FILE_SIZE)
@ -329,13 +329,11 @@ HRESULT STDMETHODCALLTYPE CInfoTip::Load(LPCOLESTR pszFileName, DWORD /*dwMode*/
fname = getShortPathName( fname );
std::string fnameA = WStringToString(fname);
// ZeroMemory because strncpy doesn't '\0'-terminates the destination
// string; reserve the last place in the buffer for the final '\0'
// that's why '(sizeof(m_szFileName) - 1)'
ZeroMemory(m_szFileName, sizeof(m_szFileName));
strncpy(m_szFileName, fnameA.c_str(), (sizeof(m_szFileName) - 1));
wcsncpy(m_szFileName, fname.c_str(), (sizeof(m_szFileName)/sizeof(*m_szFileName) - 1));
return S_OK;
}

View File

@ -571,10 +571,10 @@ SCODE STDMETHODCALLTYPE COooFilter::Load(LPCWSTR pszFileName, DWORD /*dwMode*/)
try
{
delete m_pMetaInfoReader;
m_pMetaInfoReader = new CMetaInfoReader(WStringToString(m_pwszFileName));
m_pMetaInfoReader = new CMetaInfoReader(m_pwszFileName);
delete m_pContentReader;
m_pContentReader = new CContentReader(WStringToString(m_pwszFileName), m_pMetaInfoReader->getDefaultLocale());
m_pContentReader = new CContentReader(m_pwszFileName, m_pMetaInfoReader->getDefaultLocale());
}
catch (const std::exception&)
{

View File

@ -106,11 +106,11 @@ long BufferStream::sseek (long offset, int origin)
return -1;
}
FileStream::FileStream(const char *filename) :
FileStream::FileStream(const wchar_t *filename) :
file(nullptr)
{
// fdo#67534: avoid locking to not interfere with soffice opening the file
file = _fsopen(filename, "rb", _SH_DENYNO);
file = _wfsopen(filename, L"rb", _SH_DENYNO);
}
FileStream::~FileStream()

View File

@ -63,7 +63,7 @@ CPropertyHdl::CPropertyHdl( long nRefCnt ) :
m_RefCnt( nRefCnt ),
m_pCache( nullptr )
{
OutputDebugStringFormatA( "CPropertyHdl: CTOR\n" );
OutputDebugStringFormatW( L"CPropertyHdl: CTOR\n" );
InterlockedIncrement( &g_DllRefCnt );
}
@ -87,7 +87,7 @@ HRESULT STDMETHODCALLTYPE CPropertyHdl::QueryInterface(REFIID riid, void __RPC_F
if (IID_IUnknown == riid || IID_IPropertyStore == riid)
{
OutputDebugStringFormatA( "CPropertyHdl: QueryInterface (IID_IPropertyStore)\n" );
OutputDebugStringFormatW( L"CPropertyHdl: QueryInterface (IID_IPropertyStore)\n" );
IUnknown* pUnk = static_cast<IPropertyStore*>(this);
pUnk->AddRef();
*ppvObject = pUnk;
@ -95,7 +95,7 @@ HRESULT STDMETHODCALLTYPE CPropertyHdl::QueryInterface(REFIID riid, void __RPC_F
}
else if (IID_IPropertyStoreCapabilities == riid)
{
OutputDebugStringFormatA( "CPropertyHdl: QueryInterface (IID_IPropertyStoreCapabilities)\n" );
OutputDebugStringFormatW( L"CPropertyHdl: QueryInterface (IID_IPropertyStoreCapabilities)\n" );
IUnknown* pUnk = static_cast<IPropertyStore*>(this);
pUnk->AddRef();
*ppvObject = pUnk;
@ -103,13 +103,13 @@ HRESULT STDMETHODCALLTYPE CPropertyHdl::QueryInterface(REFIID riid, void __RPC_F
}
else if (IID_IInitializeWithStream == riid)
{
OutputDebugStringFormatA( "CPropertyHdl: QueryInterface (IID_IInitializeWithStream)\n" );
OutputDebugStringFormatW( L"CPropertyHdl: QueryInterface (IID_IInitializeWithStream)\n" );
IUnknown* pUnk = static_cast<IInitializeWithStream*>(this);
pUnk->AddRef();
*ppvObject = pUnk;
return S_OK;
}
OutputDebugStringFormatA( "CPropertyHdl: QueryInterface (something different)\n" );
OutputDebugStringFormatW( L"CPropertyHdl: QueryInterface (something different)\n" );
return E_NOINTERFACE;
}
@ -208,7 +208,7 @@ HRESULT STDMETHODCALLTYPE CPropertyHdl::Initialize( IStream *pStream, DWORD grfM
if ( !m_pCache )
{
if ( FAILED( PSCreateMemoryPropertyStore( IID_PPV_ARGS( &m_pCache ) ) ) )
OutputDebugStringFormatA( "CPropertyHdl::Initialize: PSCreateMemoryPropertyStore failed" );
OutputDebugStringFormatW( L"CPropertyHdl::Initialize: PSCreateMemoryPropertyStore failed" );
BufferStream tmpStream(pStream);
@ -222,7 +222,9 @@ HRESULT STDMETHODCALLTYPE CPropertyHdl::Initialize( IStream *pStream, DWORD grfM
}
catch (const std::exception& e)
{
OutputDebugStringFormatA( "CPropertyHdl::Initialize: Caught exception [%s]", e.what() );
// To output 8-bit string using unicode version of formatting functions, use capital %S type
// see https://msdn.microsoft.com/en-us/library/hf4y5e3w
OutputDebugStringFormatW( L"CPropertyHdl::Initialize: Caught exception [%S]", e.what() );
return E_FAIL;
}
}
@ -238,37 +240,37 @@ HRESULT GetItemData( CMetaInfoReader *pMetaInfoReader, UINT nIndex, PROPVARIANT
case 0: {
pVarData->vt = VT_BSTR;
pVarData->bstrVal = SysAllocString( pMetaInfoReader->getTagData( META_INFO_TITLE ).c_str() );
OutputDebugStringFormatA( "CPropertyHdl::GetItemData: Title=%S.\n", pMetaInfoReader->getTagData( META_INFO_TITLE ).c_str() );
OutputDebugStringFormatW( L"CPropertyHdl::GetItemData: Title=%s.\n", pMetaInfoReader->getTagData( META_INFO_TITLE ).c_str() );
return S_OK;
}
case 1: {
pVarData->vt = VT_BSTR;
pVarData->bstrVal = SysAllocString( pMetaInfoReader->getTagData( META_INFO_AUTHOR ).c_str() );
OutputDebugStringFormatA( "CPropertyHdl::GetItemData: Author=%S.\n", pMetaInfoReader->getTagData( META_INFO_AUTHOR ).c_str() );
OutputDebugStringFormatW( L"CPropertyHdl::GetItemData: Author=%s.\n", pMetaInfoReader->getTagData( META_INFO_AUTHOR ).c_str() );
return S_OK;
}
case 2: {
pVarData->vt = VT_BSTR;
pVarData->bstrVal = SysAllocString( pMetaInfoReader->getTagData( META_INFO_SUBJECT ).c_str() );
OutputDebugStringFormatA( "CPropertyHdl::GetItemData: Subject=%S.\n", pMetaInfoReader->getTagData( META_INFO_SUBJECT ).c_str() );
OutputDebugStringFormatW( L"CPropertyHdl::GetItemData: Subject=%s.\n", pMetaInfoReader->getTagData( META_INFO_SUBJECT ).c_str() );
return S_OK;
}
case 3: {
pVarData->vt = VT_BSTR;
pVarData->bstrVal = SysAllocString( pMetaInfoReader->getTagData( META_INFO_KEYWORDS ).c_str() );
OutputDebugStringFormatA( "CPropertyHdl::GetItemData: Keywords=%S.\n", pMetaInfoReader->getTagData( META_INFO_KEYWORDS ).c_str() );
OutputDebugStringFormatW( L"CPropertyHdl::GetItemData: Keywords=%s.\n", pMetaInfoReader->getTagData( META_INFO_KEYWORDS ).c_str() );
return S_OK;
}
case 4: {
pVarData->vt = VT_BSTR;
pVarData->bstrVal = SysAllocString( pMetaInfoReader->getTagData( META_INFO_DESCRIPTION ).c_str() );
OutputDebugStringFormatA( "CPropertyHdl::GetItemData: Description=%S.\n", pMetaInfoReader->getTagData( META_INFO_DESCRIPTION ).c_str() );
OutputDebugStringFormatW( L"CPropertyHdl::GetItemData: Description=%s.\n", pMetaInfoReader->getTagData( META_INFO_DESCRIPTION ).c_str() );
return S_OK;
}
case 5: {
pVarData->vt = VT_BSTR;
pVarData->bstrVal = SysAllocString( pMetaInfoReader->getTagAttribute( META_INFO_DOCUMENT_STATISTIC, META_INFO_PAGES ).c_str() );
OutputDebugStringFormatA( "CPropertyHdl::GetItemData: Pages=%S.\n", pMetaInfoReader->getTagAttribute( META_INFO_DOCUMENT_STATISTIC, META_INFO_PAGES ).c_str() );
OutputDebugStringFormatW( L"CPropertyHdl::GetItemData: Pages=%s.\n", pMetaInfoReader->getTagAttribute( META_INFO_DOCUMENT_STATISTIC, META_INFO_PAGES ).c_str() );
return S_OK;
}
}
@ -280,7 +282,7 @@ HRESULT GetItemData( CMetaInfoReader *pMetaInfoReader, UINT nIndex, PROPVARIANT
void CPropertyHdl::LoadProperties( CMetaInfoReader *pMetaInfoReader )
{
OutputDebugStringFormatA( "CPropertyHdl: LoadProperties\n" );
OutputDebugStringFormatW( L"CPropertyHdl: LoadProperties\n" );
PROPVARIANT propvarValues;
for ( UINT i = 0; i < (UINT)gPropertyMapTableSize; ++i )
@ -403,7 +405,7 @@ bool CClassFactory::IsLocked()
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv)
{
OutputDebugStringFormatA( "DllGetClassObject.\n" );
OutputDebugStringFormatW( L"DllGetClassObject.\n" );
*ppv = nullptr;
if ( rclsid != CLSID_PROPERTY_HANDLER )
@ -420,7 +422,7 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv)
STDAPI DllCanUnloadNow()
{
OutputDebugStringFormatA( "DllCanUnloadNow.\n" );
OutputDebugStringFormatW( L"DllCanUnloadNow.\n" );
if (CClassFactory::IsLocked() || g_DllRefCnt > 0)
return S_FALSE;
@ -430,7 +432,7 @@ STDAPI DllCanUnloadNow()
BOOL WINAPI DllMain( HINSTANCE hInst, ULONG /*ul_reason_for_call*/, LPVOID /*lpReserved*/ )
{
OutputDebugStringFormatA( "DllMain.\n" );
OutputDebugStringFormatW( L"DllMain.\n" );
g_hModule = hInst;
return TRUE;
}

View File

@ -31,7 +31,7 @@
const bool READONLY = false;
document_statistic_reader_ptr create_document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor)
document_statistic_reader_ptr create_document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor)
{
File_Type_t file_type = get_file_type(document_name);
@ -44,7 +44,7 @@ document_statistic_reader_ptr create_document_statistic_reader(const std::string
}
document_statistic_reader::document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor) :
document_statistic_reader::document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor) :
document_name_(document_name),
meta_info_accessor_(meta_info_accessor)
{}
@ -59,7 +59,7 @@ void document_statistic_reader::read(statistic_group_list_t* group_list)
fill_origin_section(meta_info_accessor_, group_list);
}
std::string document_statistic_reader::get_document_name() const
std::wstring document_statistic_reader::get_document_name() const
{
return document_name_;
}
@ -81,7 +81,7 @@ void document_statistic_reader::fill_origin_section(CMetaInfoReader *meta_info_a
group_list->push_back(statistic_group_t(GetResString(IDS_ORIGIN), il));
}
writer_document_statistic_reader::writer_document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor) :
writer_document_statistic_reader::writer_document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor) :
document_statistic_reader(document_name, meta_info_accessor)
{}
@ -105,7 +105,7 @@ void writer_document_statistic_reader::fill_description_section(CMetaInfoReader
}
calc_document_statistic_reader::calc_document_statistic_reader(
const std::string& document_name, CMetaInfoReader* meta_info_accessor) :
const std::wstring& document_name, CMetaInfoReader* meta_info_accessor) :
document_statistic_reader(document_name, meta_info_accessor)
{}
@ -126,7 +126,7 @@ void calc_document_statistic_reader::fill_description_section(
}
draw_impress_math_document_statistic_reader::draw_impress_math_document_statistic_reader(
const std::string& document_name, CMetaInfoReader* meta_info_accessor) :
const std::wstring& document_name, CMetaInfoReader* meta_info_accessor) :
document_statistic_reader(document_name, meta_info_accessor)
{}

View File

@ -54,7 +54,7 @@ typedef std::vector<statistic_group_t> statistic_group_list_t;
class document_statistic_reader;
typedef std::unique_ptr<document_statistic_reader> document_statistic_reader_ptr;
document_statistic_reader_ptr create_document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor);
document_statistic_reader_ptr create_document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
class document_statistic_reader
@ -64,57 +64,57 @@ public:
void read(statistic_group_list_t* group_list);
std::string get_document_name() const;
std::wstring get_document_name() const;
protected:
document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor);
document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
virtual void fill_description_section(CMetaInfoReader *meta_info_accessor,statistic_group_list_t* group_list) = 0;
virtual void fill_origin_section( CMetaInfoReader *meta_info_accessor,statistic_group_list_t* group_list);
private:
std::string document_name_;
std::wstring document_name_;
CMetaInfoReader* meta_info_accessor_;
friend document_statistic_reader_ptr create_document_statistic_reader(
const std::string& document_name, CMetaInfoReader* meta_info_accessor);
const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
};
class writer_document_statistic_reader : public document_statistic_reader
{
protected:
writer_document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor);
writer_document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
virtual void fill_description_section(CMetaInfoReader *meta_info_accessor, statistic_group_list_t* group_list) override;
friend document_statistic_reader_ptr create_document_statistic_reader(
const std::string& document_name, CMetaInfoReader* meta_info_accessor);
const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
};
class calc_document_statistic_reader : public document_statistic_reader
{
protected:
calc_document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor);
calc_document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
virtual void fill_description_section( CMetaInfoReader *meta_info_accessor,statistic_group_list_t* group_list) override;
friend document_statistic_reader_ptr create_document_statistic_reader(
const std::string& document_name, CMetaInfoReader* meta_info_accessor);
const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
};
class draw_impress_math_document_statistic_reader : public document_statistic_reader
{
protected:
draw_impress_math_document_statistic_reader(const std::string& document_name, CMetaInfoReader* meta_info_accessor);
draw_impress_math_document_statistic_reader(const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
virtual void fill_description_section(CMetaInfoReader *meta_info_accessor, statistic_group_list_t* group_list) override;
friend document_statistic_reader_ptr create_document_statistic_reader(
const std::string& document_name, CMetaInfoReader* meta_info_accessor);
const std::wstring& document_name, CMetaInfoReader* meta_info_accessor);
};
#endif

View File

@ -57,14 +57,14 @@
CPropertySheet::CPropertySheet(long RefCnt) :
m_RefCnt(RefCnt)
{
OutputDebugStringFormatA("CPropertySheet::CTor [%d], [%d]", m_RefCnt, g_DllRefCnt );
OutputDebugStringFormatW(L"CPropertySheet::CTor [%d], [%d]", m_RefCnt, g_DllRefCnt );
InterlockedIncrement(&g_DllRefCnt);
}
CPropertySheet::~CPropertySheet()
{
OutputDebugStringFormatA("CPropertySheet::DTor [%d], [%d]", m_RefCnt, g_DllRefCnt );
OutputDebugStringFormatW(L"CPropertySheet::DTor [%d], [%d]", m_RefCnt, g_DllRefCnt );
InterlockedDecrement(&g_DllRefCnt);
}
@ -99,14 +99,14 @@ HRESULT STDMETHODCALLTYPE CPropertySheet::QueryInterface(
ULONG STDMETHODCALLTYPE CPropertySheet::AddRef()
{
OutputDebugStringFormatA("CPropertySheet::AddRef [%d]", m_RefCnt );
OutputDebugStringFormatW(L"CPropertySheet::AddRef [%d]", m_RefCnt );
return InterlockedIncrement(&m_RefCnt);
}
ULONG STDMETHODCALLTYPE CPropertySheet::Release()
{
OutputDebugStringFormatA("CPropertySheet::Release [%d]", m_RefCnt );
OutputDebugStringFormatW(L"CPropertySheet::Release [%d]", m_RefCnt );
long refcnt = InterlockedDecrement(&m_RefCnt);
if (0 == refcnt)
@ -131,7 +131,7 @@ HRESULT STDMETHODCALLTYPE CPropertySheet::Initialize(
// save the file name
if (SUCCEEDED(hr) &&
(1 == DragQueryFileA(
(1 == DragQueryFileW(
static_cast<HDROP>(medium.hGlobal),
0xFFFFFFFF,
nullptr,
@ -146,9 +146,8 @@ HRESULT STDMETHODCALLTYPE CPropertySheet::Initialize(
if ( result_size != 0 )
{
std::wstring fname = getShortPathName( buffer.get() );
std::string fnameA = WStringToString( fname );
ZeroMemory( m_szFileName, sizeof( m_szFileName ) );
strncpy( m_szFileName, fnameA.c_str(), ( sizeof( m_szFileName ) - 1 ) );
wcsncpy( m_szFileName, fname.c_str(), ( SAL_N_ELEMENTS( m_szFileName ) - 1 ) );
hr = S_OK;
}
else
@ -176,11 +175,11 @@ HRESULT STDMETHODCALLTYPE CPropertySheet::AddPages(LPFNADDPROPSHEETPAGE lpfnAddP
bool bIsVistaOrLater = IsWindowsVistaOrGreater();
#else
// Get OS version (we don't need the summary page on Windows Vista or later)
OSVERSIONINFO sInfoOS;
OSVERSIONINFOW sInfoOS;
ZeroMemory( &sInfoOS, sizeof(OSVERSIONINFO) );
sInfoOS.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
GetVersionEx( &sInfoOS );
ZeroMemory( &sInfoOS, sizeof(sInfoOS) );
sInfoOS.dwOSVersionInfoSize = sizeof( sInfoOS );
GetVersionExW( &sInfoOS );
bool bIsVistaOrLater = (sInfoOS.dwMajorVersion >= 6);
#endif
@ -303,10 +302,10 @@ void CPropertySheet::InitPropPageSummary(HWND hwnd, LPPROPSHEETPAGE /*lppsp*/)
{
CMetaInfoReader metaInfo(m_szFileName);
SetWindowText(GetDlgItem(hwnd,IDC_TITLE), metaInfo.getTagData( META_INFO_TITLE ).c_str() );
SetWindowText(GetDlgItem(hwnd,IDC_AUTHOR), metaInfo.getTagData( META_INFO_AUTHOR ).c_str() );
SetWindowText(GetDlgItem(hwnd,IDC_SUBJECT), metaInfo.getTagData( META_INFO_SUBJECT ).c_str() );
SetWindowText(GetDlgItem(hwnd,IDC_KEYWORDS), metaInfo.getTagData( META_INFO_KEYWORDS ).c_str() );
SetWindowTextW(GetDlgItem(hwnd,IDC_TITLE), metaInfo.getTagData( META_INFO_TITLE ).c_str() );
SetWindowTextW(GetDlgItem(hwnd,IDC_AUTHOR), metaInfo.getTagData( META_INFO_AUTHOR ).c_str() );
SetWindowTextW(GetDlgItem(hwnd,IDC_SUBJECT), metaInfo.getTagData( META_INFO_SUBJECT ).c_str() );
SetWindowTextW(GetDlgItem(hwnd,IDC_KEYWORDS), metaInfo.getTagData( META_INFO_KEYWORDS ).c_str() );
// comments read from meta.xml use "\n" for return, but this will not displayable in Edit control, add
// "\r" before "\n" to form "\r\n" in order to display return in Edit control.
@ -317,7 +316,7 @@ void CPropertySheet::InitPropPageSummary(HWND hwnd, LPPROPSHEETPAGE /*lppsp*/)
tempStr.insert(itor, L"\r");
itor = tempStr.find(L"\n", itor + 2);
}
SetWindowText(GetDlgItem(hwnd,IDC_COMMENTS), tempStr.c_str());
SetWindowTextW(GetDlgItem(hwnd,IDC_COMMENTS), tempStr.c_str());
}
catch (const std::exception&)
{

View File

@ -36,29 +36,29 @@ HINSTANCE g_hModule = nullptr;
namespace /* private */
{
const char* const GUID_PLACEHOLDER = "{GUID}";
const char* const EXTENSION_PLACEHOLDER = "{EXT}";
const char* const FORWARDKEY_PLACEHOLDER = "{FWDKEY}";
const wchar_t* const GUID_PLACEHOLDER = L"{GUID}";
const wchar_t* const EXTENSION_PLACEHOLDER = L"{EXT}";
const wchar_t* const FORWARDKEY_PLACEHOLDER = L"{FWDKEY}";
const char* const CLSID_ENTRY = "CLSID\\{GUID}\\InProcServer32";
const char* const SHELLEX_IID_ENTRY = "{EXT}\\shellex\\{GUID}";
const char* const SHELLEX_ENTRY = "{EXT}\\shellex";
const char* const FORWARD_PROPSHEET_MYPROPSHEET_ENTRY = "{FWDKEY}\\shellex\\PropertySheetHandlers\\MyPropSheet1";
const char* const FORWARD_PROPSHEET_ENTRY = "{FWDKEY}\\shellex\\PropertySheetHandlers";
const char* const FORWARD_SHELLEX_ENTRY = "{FWDKEY}\\shellex";
const wchar_t* const CLSID_ENTRY = L"CLSID\\{GUID}\\InProcServer32";
const wchar_t* const SHELLEX_IID_ENTRY = L"{EXT}\\shellex\\{GUID}";
const wchar_t* const SHELLEX_ENTRY = L"{EXT}\\shellex";
const wchar_t* const FORWARD_PROPSHEET_MYPROPSHEET_ENTRY = L"{FWDKEY}\\shellex\\PropertySheetHandlers\\MyPropSheet1";
const wchar_t* const FORWARD_PROPSHEET_ENTRY = L"{FWDKEY}\\shellex\\PropertySheetHandlers";
const wchar_t* const FORWARD_SHELLEX_ENTRY = L"{FWDKEY}\\shellex";
const char* const SHELL_EXTENSION_APPROVED_KEY_NAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved";
const wchar_t* const SHELL_EXTENSION_APPROVED_KEY_NAME = L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved";
// "String Placeholder" ->
// "String Replacement"
void SubstitutePlaceholder(std::string& String, const std::string& Placeholder, const std::string& Replacement)
void SubstitutePlaceholder(std::wstring& String, const std::wstring& Placeholder, const std::wstring& Replacement)
{
std::string::size_type idx = String.find(Placeholder);
std::string::size_type len = Placeholder.length();
std::wstring::size_type idx = String.find(Placeholder);
std::wstring::size_type len = Placeholder.length();
while (std::string::npos != idx)
while (std::wstring::npos != idx)
{
String.replace(idx, len, Replacement);
idx = String.find(Placeholder);
@ -70,15 +70,15 @@ namespace /* private */
InProcServer32 = Path\shlxthdl.dll
ThreadingModel = Apartment
*/
HRESULT RegisterComComponent(const char* FilePath, const CLSID& Guid)
HRESULT RegisterComComponent(const wchar_t* FilePath, const CLSID& Guid)
{
std::string ClsidEntry = CLSID_ENTRY;
std::wstring ClsidEntry = CLSID_ENTRY;
SubstitutePlaceholder(ClsidEntry, GUID_PLACEHOLDER, ClsidToString(Guid));
if (!SetRegistryKey(HKEY_CLASSES_ROOT, ClsidEntry.c_str(), "", FilePath))
if (!SetRegistryKey(HKEY_CLASSES_ROOT, ClsidEntry.c_str(), L"", FilePath))
return E_FAIL;
if (!SetRegistryKey(HKEY_CLASSES_ROOT, ClsidEntry.c_str(), "ThreadingModel", "Apartment"))
if (!SetRegistryKey(HKEY_CLASSES_ROOT, ClsidEntry.c_str(), L"ThreadingModel", L"Apartment"))
return E_FAIL;
return S_OK;
@ -86,29 +86,29 @@ namespace /* private */
HRESULT UnregisterComComponent(const CLSID& Guid)
{
std::string tmp = "CLSID\\";
std::wstring tmp = L"CLSID\\";
tmp += ClsidToString(Guid);
return DeleteRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str()) ? S_OK : E_FAIL;
}
HRESULT RegisterColumnHandler(const char* ModuleFileName)
HRESULT RegisterColumnHandler(const wchar_t* ModuleFileName)
{
if (FAILED(RegisterComComponent(ModuleFileName, CLSID_COLUMN_HANDLER)))
return E_FAIL;
std::string tmp = "Folder\\shellex\\ColumnHandlers\\";
std::wstring tmp = L"Folder\\shellex\\ColumnHandlers\\";
tmp += ClsidToString(CLSID_COLUMN_HANDLER);
return SetRegistryKey(
HKEY_CLASSES_ROOT,
tmp.c_str(),
"",
WStringToString(COLUMN_HANDLER_DESCRIPTIVE_NAME).c_str()) ? S_OK : E_FAIL;
L"",
COLUMN_HANDLER_DESCRIPTIVE_NAME) ? S_OK : E_FAIL;
}
HRESULT UnregisterColumnHandler()
{
std::string tmp = "Folder\\shellex\\ColumnHandlers\\";
std::wstring tmp = L"Folder\\shellex\\ColumnHandlers\\";
tmp += ClsidToString(CLSID_COLUMN_HANDLER);
if (!DeleteRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str()))
@ -117,21 +117,21 @@ namespace /* private */
return UnregisterComComponent(CLSID_COLUMN_HANDLER);
}
HRESULT RegisterInfotipHandler(const char* ModuleFileName)
HRESULT RegisterInfotipHandler(const wchar_t* ModuleFileName)
{
if (FAILED(RegisterComComponent(ModuleFileName, CLSID_INFOTIP_HANDLER)))
return E_FAIL;
std::string iid = ClsidToString(IID_IQueryInfo);
std::string tmp;
std::wstring iid = ClsidToString(IID_IQueryInfo);
std::wstring tmp;
for(size_t i = 0; i < OOFileExtensionTableSize; i++)
{
tmp = SHELLEX_IID_ENTRY;
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionAnsi);
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionU);
SubstitutePlaceholder(tmp, GUID_PLACEHOLDER, iid);
if (!SetRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str(), "", ClsidToString(CLSID_INFOTIP_HANDLER).c_str()))
if (!SetRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str(), L"", ClsidToString(CLSID_INFOTIP_HANDLER).c_str()))
return E_FAIL;
}
return S_OK;
@ -139,14 +139,14 @@ namespace /* private */
HRESULT UnregisterInfotipHandler()
{
std::string iid = ClsidToString(IID_IQueryInfo);
std::string tmp;
std::wstring iid = ClsidToString(IID_IQueryInfo);
std::wstring tmp;
for (size_t i = 0; i < OOFileExtensionTableSize; i++)
{
tmp = SHELLEX_IID_ENTRY;
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionAnsi);
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionU);
SubstitutePlaceholder(tmp, GUID_PLACEHOLDER, iid);
DeleteRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str());
@ -154,7 +154,7 @@ namespace /* private */
// if there are no further subkey below .ext\\shellex
// delete the whole subkey
tmp = SHELLEX_ENTRY;
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionAnsi);
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionU);
bool HasSubKeys = true;
if (HasSubkeysRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str(), HasSubKeys) && !HasSubKeys)
@ -163,9 +163,9 @@ namespace /* private */
return UnregisterComComponent(CLSID_INFOTIP_HANDLER);
}
HRESULT RegisterPropSheetHandler(const char* ModuleFileName)
HRESULT RegisterPropSheetHandler(const wchar_t* ModuleFileName)
{
std::string FwdKeyEntry;
std::wstring FwdKeyEntry;
if (FAILED(RegisterComComponent(ModuleFileName, CLSID_PROPERTYSHEET_HANDLER)))
return E_FAIL;
@ -175,7 +175,7 @@ namespace /* private */
FwdKeyEntry = FORWARD_PROPSHEET_MYPROPSHEET_ENTRY;
SubstitutePlaceholder(FwdKeyEntry, FORWARDKEY_PLACEHOLDER, OOFileExtensionTable[i].RegistryForwardKey);
if (!SetRegistryKey(HKEY_CLASSES_ROOT, FwdKeyEntry.c_str(), "", ClsidToString(CLSID_PROPERTYSHEET_HANDLER).c_str()))
if (!SetRegistryKey(HKEY_CLASSES_ROOT, FwdKeyEntry.c_str(), L"", ClsidToString(CLSID_PROPERTYSHEET_HANDLER).c_str()))
return E_FAIL;
}
return S_OK;
@ -183,7 +183,7 @@ namespace /* private */
HRESULT UnregisterPropSheetHandler()
{
std::string FwdKeyEntry;
std::wstring FwdKeyEntry;
for (size_t i = 0; i < OOFileExtensionTableSize; i++)
{
@ -210,22 +210,22 @@ namespace /* private */
return UnregisterComComponent(CLSID_PROPERTYSHEET_HANDLER);
}
HRESULT RegisterThumbviewerHandler(const char* ModuleFileName)
HRESULT RegisterThumbviewerHandler(const wchar_t* ModuleFileName)
{
if (FAILED(RegisterComComponent(ModuleFileName, CLSID_THUMBVIEWER_HANDLER)))
return E_FAIL;
std::string iid = ClsidToString(IID_IExtractImage);
std::string tmp;
std::wstring iid = ClsidToString(IID_IExtractImage);
std::wstring tmp;
for(size_t i = 0; i < OOFileExtensionTableSize; i++)
{
tmp = SHELLEX_IID_ENTRY;
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionAnsi);
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionU);
SubstitutePlaceholder(tmp, GUID_PLACEHOLDER, iid);
if (!SetRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str(), "", ClsidToString(CLSID_THUMBVIEWER_HANDLER).c_str()))
if (!SetRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str(), L"", ClsidToString(CLSID_THUMBVIEWER_HANDLER).c_str()))
return E_FAIL;
}
return S_OK;
@ -233,14 +233,14 @@ namespace /* private */
HRESULT UnregisterThumbviewerHandler()
{
std::string iid = ClsidToString(IID_IExtractImage);
std::string tmp;
std::wstring iid = ClsidToString(IID_IExtractImage);
std::wstring tmp;
for (size_t i = 0; i < OOFileExtensionTableSize; i++)
{
tmp = SHELLEX_IID_ENTRY;
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionAnsi);
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionU);
SubstitutePlaceholder(tmp, GUID_PLACEHOLDER, iid);
DeleteRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str());
@ -248,7 +248,7 @@ namespace /* private */
// if there are no further subkey below .ext\\shellex
// delete the whole subkey
tmp = SHELLEX_ENTRY;
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionAnsi);
SubstitutePlaceholder(tmp, EXTENSION_PLACEHOLDER, OOFileExtensionTable[i].ExtensionU);
bool HasSubKeys = true;
if (HasSubkeysRegistryKey(HKEY_CLASSES_ROOT, tmp.c_str(), HasSubKeys) && !HasSubKeys)
@ -265,7 +265,7 @@ namespace /* private */
HKEY_LOCAL_MACHINE,
SHELL_EXTENSION_APPROVED_KEY_NAME,
ClsidToString(clsid).c_str(),
WStringToString(Description).c_str());
Description.c_str());
return bRet ? S_OK : E_FAIL;
}
@ -274,14 +274,14 @@ namespace /* private */
{
HKEY hkey;
LONG rc = RegOpenKeyA(
LONG rc = RegOpenKeyW(
HKEY_LOCAL_MACHINE,
SHELL_EXTENSION_APPROVED_KEY_NAME,
&hkey);
if (ERROR_SUCCESS == rc)
{
rc = RegDeleteValueA(
rc = RegDeleteValueW(
hkey,
ClsidToString(Clsid).c_str());
@ -306,25 +306,24 @@ STDAPI DllRegisterServer()
ModuleFileName,
sizeof(ModuleFileName)/sizeof(ModuleFileName[0]));
std::string module_path = WStringToString(ModuleFileName);
HRESULT hr = S_OK;
if (SUCCEEDED(RegisterColumnHandler(module_path.c_str())))
if (SUCCEEDED(RegisterColumnHandler(ModuleFileName)))
ApproveShellExtension(CLSID_COLUMN_HANDLER, COLUMN_HANDLER_DESCRIPTIVE_NAME);
else
hr = E_FAIL;
if (SUCCEEDED(RegisterInfotipHandler(module_path.c_str())))
if (SUCCEEDED(RegisterInfotipHandler(ModuleFileName)))
ApproveShellExtension(CLSID_INFOTIP_HANDLER, INFOTIP_HANDLER_DESCRIPTIVE_NAME);
else
hr = E_FAIL;
if (SUCCEEDED(RegisterPropSheetHandler(module_path.c_str())))
if (SUCCEEDED(RegisterPropSheetHandler(ModuleFileName)))
ApproveShellExtension(CLSID_PROPERTYSHEET_HANDLER, PROPSHEET_HANDLER_DESCRIPTIVE_NAME);
else
hr = E_FAIL;
if (SUCCEEDED(RegisterThumbviewerHandler(module_path.c_str())))
if (SUCCEEDED(RegisterThumbviewerHandler(ModuleFileName)))
ApproveShellExtension(CLSID_THUMBVIEWER_HANDLER, THUMBVIEWER_HANDLER_DESCRIPTIVE_NAME);
else
hr = E_FAIL;
@ -379,13 +378,13 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv)
return E_NOINTERFACE;
if ( rclsid == CLSID_INFOTIP_HANDLER )
OutputDebugStringFormatA( "DllGetClassObject: Create CLSID_INFOTIP_HANDLER\n" );
OutputDebugStringFormatW( L"DllGetClassObject: Create CLSID_INFOTIP_HANDLER\n" );
else if ( rclsid == CLSID_COLUMN_HANDLER )
OutputDebugStringFormatA( "DllGetClassObject: Create CLSID_COLUMN_HANDLER\n" );
OutputDebugStringFormatW( L"DllGetClassObject: Create CLSID_COLUMN_HANDLER\n" );
else if ( rclsid == CLSID_PROPERTYSHEET_HANDLER )
OutputDebugStringFormatA( "DllGetClassObject: Create CLSID_PROPERTYSHEET_HANDLER\n" );
OutputDebugStringFormatW( L"DllGetClassObject: Create CLSID_PROPERTYSHEET_HANDLER\n" );
else if ( rclsid == CLSID_THUMBVIEWER_HANDLER )
OutputDebugStringFormatA( "DllGetClassObject: Create CLSID_THUMBVIEWER_HANDLER\n" );
OutputDebugStringFormatW( L"DllGetClassObject: Create CLSID_THUMBVIEWER_HANDLER\n" );
IUnknown* pUnk = new CClassFactory(rclsid);
*ppv = pUnk;

View File

@ -73,10 +73,10 @@ namespace internal
#ifdef _WIN32_WINNT_WINBLUE
return IsWindowsXPOrGreater();
#else
OSVERSIONINFO osvi;
OSVERSIONINFOW osvi;
ZeroMemory(&osvi, sizeof(osvi));
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
GetVersionExW(&osvi);
return ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
((osvi.dwMajorVersion >= 5) && (osvi.dwMinorVersion >= 1)));
@ -376,7 +376,7 @@ HRESULT STDMETHODCALLTYPE CThumbviewer::Extract(HBITMAP *phBmpImage)
try
{
std::wstring fname = getShortPathName( filename_ );
std::unique_ptr<ZipFile> zipfile( new ZipFile( WStringToString( fname ) ) );
std::unique_ptr<ZipFile> zipfile( new ZipFile( fname ) );
if (zipfile->HasContent(THUMBNAIL_CONTENT))
{
@ -477,7 +477,7 @@ HRESULT STDMETHODCALLTYPE CThumbviewer::Extract(HBITMAP *phBmpImage)
}
catch(std::exception&)
{
OutputDebugStringFormatA( "CThumbviewer Extract ERROR!\n" );
OutputDebugStringFormatW( L"CThumbviewer Extract ERROR!\n" );
hr = E_FAIL;
}
return hr;

View File

@ -23,37 +23,37 @@
#include <sal/macros.h>
const std::string WRITER_FILE_EXTENSIONS = "sxwstwsxgodtottodm";
const std::string CALC_FILE_EXTENSIONS = "sxcstcodsots";
const std::string DRAW_FILE_EXTENSIONS = "sxdstdodgotg";
const std::string IMPRESS_FILE_EXTENSIONS = "sxistiodpotp";
const std::string MATH_FILE_EXTENSIONS = "sxmodf";
const std::string WEB_FILE_EXTENSIONS = "oth";
const std::string DATABASE_FILE_EXTENSIONS = "odb";
const std::wstring WRITER_FILE_EXTENSIONS = L"sxwstwsxgodtottodm";
const std::wstring CALC_FILE_EXTENSIONS = L"sxcstcodsots";
const std::wstring DRAW_FILE_EXTENSIONS = L"sxdstdodgotg";
const std::wstring IMPRESS_FILE_EXTENSIONS = L"sxistiodpotp";
const std::wstring MATH_FILE_EXTENSIONS = L"sxmodf";
const std::wstring WEB_FILE_EXTENSIONS = L"oth";
const std::wstring DATABASE_FILE_EXTENSIONS = L"odb";
const FileExtensionEntry OOFileExtensionTable[] = {
{ ".sxw", L".sxw", "soffice.StarWriterDocument.6" },
{ ".sxc", L".sxc", "soffice.StarCalcDocument.6" },
{ ".sxi", L".sxi", "soffice.StarImpressDocument.6" },
{ ".sxd", L".sxd", "soffice.StarDrawDocument.6" },
{ ".sxm", L".sxm", "soffice.StarMathDocument.6" },
{ ".stw", L".stw", "soffice.StarWriterTemplate.6" },
{ ".sxg", L".sxg", "soffice.StarWriterGlobalDocument.6" },
{ ".std", L".std", "soffice.StarDrawTemplate.6" },
{ ".sti", L".sti", "soffice.StarImpressTemplate.6" },
{ ".stc", L".stc", "soffice.StarCalcTemplate.6" },
{ ".odt", L".odt", "LibreOffice.WriterDocument.1" },
{ ".ott", L".ott", "LibreOffice.WriterTemplate.1" },
{ ".odm", L".odm", "LibreOffice.WriterGlobalDocument.1" },
{ ".oth", L".oth", "LibreOffice.WriterWebTemplate.1" },
{ ".ods", L".ods", "LibreOffice.CalcDocument.1" },
{ ".ots", L".ots", "LibreOffice.CalcTemplate.1" },
{ ".odg", L".odg", "LibreOffice.DrawDocument.1" },
{ ".otg", L".otg", "LibreOffice.DrawTemplate.1" },
{ ".odp", L".odp", "LibreOffice.ImpressDocument.1" },
{ ".otp", L".otp", "LibreOffice.ImpressTemplate.1" },
{ ".odf", L".odf", "LibreOffice.MathDocument.1" },
{ ".odb", L".odb", "LibreOffice.DatabaseDocument.1" }
{ ".sxw", L".sxw", L"soffice.StarWriterDocument.6" },
{ ".sxc", L".sxc", L"soffice.StarCalcDocument.6" },
{ ".sxi", L".sxi", L"soffice.StarImpressDocument.6" },
{ ".sxd", L".sxd", L"soffice.StarDrawDocument.6" },
{ ".sxm", L".sxm", L"soffice.StarMathDocument.6" },
{ ".stw", L".stw", L"soffice.StarWriterTemplate.6" },
{ ".sxg", L".sxg", L"soffice.StarWriterGlobalDocument.6" },
{ ".std", L".std", L"soffice.StarDrawTemplate.6" },
{ ".sti", L".sti", L"soffice.StarImpressTemplate.6" },
{ ".stc", L".stc", L"soffice.StarCalcTemplate.6" },
{ ".odt", L".odt", L"LibreOffice.WriterDocument.1" },
{ ".ott", L".ott", L"LibreOffice.WriterTemplate.1" },
{ ".odm", L".odm", L"LibreOffice.WriterGlobalDocument.1" },
{ ".oth", L".oth", L"LibreOffice.WriterWebTemplate.1" },
{ ".ods", L".ods", L"LibreOffice.CalcDocument.1" },
{ ".ots", L".ots", L"LibreOffice.CalcTemplate.1" },
{ ".odg", L".odg", L"LibreOffice.DrawDocument.1" },
{ ".otg", L".otg", L"LibreOffice.DrawTemplate.1" },
{ ".odp", L".odp", L"LibreOffice.ImpressDocument.1" },
{ ".otp", L".otp", L"LibreOffice.ImpressTemplate.1" },
{ ".odf", L".odf", L"LibreOffice.MathDocument.1" },
{ ".odb", L".odb", L"LibreOffice.DatabaseDocument.1" }
};
@ -63,41 +63,41 @@ const size_t OOFileExtensionTableSize = SAL_N_ELEMENTS(OOFileExtensionTable);
/** Return the extension of a file
name without the '.'
*/
std::string get_file_name_extension(const std::string& file_name)
std::wstring get_file_name_extension(const std::wstring& file_name)
{
std::string::size_type idx = file_name.find_last_of(".");
std::wstring::size_type idx = file_name.find_last_of(L".");
if (std::string::npos != idx++)
return std::string(file_name.begin() + idx, file_name.end());
if (std::wstring::npos != idx++)
return std::wstring(file_name.begin() + idx, file_name.end());
return std::string();
return std::wstring();
}
/** Return the type of a file
*/
File_Type_t get_file_type(const std::string& file_name)
File_Type_t get_file_type(const std::wstring& file_name)
{
std::string fext = get_file_name_extension(file_name);
std::wstring fext = get_file_name_extension(file_name);
std::transform(
fext.begin(), fext.end(), fext.begin(),
[](char c) {
return rtl::toAsciiLowerCase(static_cast<unsigned char>(c)); });
[](wchar_t c) {
return rtl::toAsciiLowerCase(c); });
if (std::string::npos != WRITER_FILE_EXTENSIONS.find(fext))
if (std::wstring::npos != WRITER_FILE_EXTENSIONS.find(fext))
return WRITER;
else if (std::string::npos != CALC_FILE_EXTENSIONS.find(fext))
else if (std::wstring::npos != CALC_FILE_EXTENSIONS.find(fext))
return CALC;
else if (std::string::npos != DRAW_FILE_EXTENSIONS.find(fext))
else if (std::wstring::npos != DRAW_FILE_EXTENSIONS.find(fext))
return DRAW;
else if (std::string::npos != IMPRESS_FILE_EXTENSIONS.find(fext))
else if (std::wstring::npos != IMPRESS_FILE_EXTENSIONS.find(fext))
return IMPRESS;
else if (std::string::npos != MATH_FILE_EXTENSIONS.find(fext))
else if (std::wstring::npos != MATH_FILE_EXTENSIONS.find(fext))
return MATH;
else if (std::string::npos != WEB_FILE_EXTENSIONS.find(fext))
else if (std::wstring::npos != WEB_FILE_EXTENSIONS.find(fext))
return WEB;
else if (std::string::npos != DATABASE_FILE_EXTENSIONS.find(fext))
else if (std::wstring::npos != DATABASE_FILE_EXTENSIONS.find(fext))
return DATABASE;
else
return UNKNOWN;

View File

@ -39,20 +39,20 @@
#pragma warning(pop)
#endif
bool SetRegistryKey(HKEY RootKey, const char* KeyName, const char* ValueName, const char* Value)
bool SetRegistryKey(HKEY RootKey, const wchar_t* KeyName, const wchar_t* ValueName, const wchar_t* Value)
{
HKEY hSubKey;
// open or create the desired key
char dummy[] = "";
int rc = RegCreateKeyExA(
wchar_t dummy[] = L"";
int rc = RegCreateKeyExW(
RootKey, KeyName, 0, dummy, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &hSubKey, nullptr);
if (ERROR_SUCCESS == rc)
{
rc = RegSetValueExA(
rc = RegSetValueExW(
hSubKey, ValueName, 0, REG_SZ, reinterpret_cast<const BYTE*>(Value),
static_cast<DWORD>(strlen(Value) + 1));
static_cast<DWORD>((wcslen(Value) + 1) * sizeof(*Value)));
RegCloseKey(hSubKey);
}
@ -61,11 +61,11 @@ bool SetRegistryKey(HKEY RootKey, const char* KeyName, const char* ValueName, co
}
bool DeleteRegistryKey(HKEY RootKey, const char* KeyName)
bool DeleteRegistryKey(HKEY RootKey, const wchar_t* KeyName)
{
HKEY hKey;
int rc = RegOpenKeyExA(
int rc = RegOpenKeyExW(
RootKey,
KeyName,
0,
@ -77,24 +77,24 @@ bool DeleteRegistryKey(HKEY RootKey, const char* KeyName)
if (ERROR_SUCCESS == rc)
{
char* SubKey;
wchar_t* SubKey;
DWORD nMaxSubKeyLen;
rc = RegQueryInfoKeyA(
rc = RegQueryInfoKeyW(
hKey, nullptr, nullptr, nullptr, nullptr,
&nMaxSubKeyLen,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
nMaxSubKeyLen++; // space for trailing '\0'
SubKey = static_cast<char*>(
_alloca(nMaxSubKeyLen*sizeof(char)));
SubKey = static_cast<wchar_t*>(
_alloca(nMaxSubKeyLen*sizeof(wchar_t)));
while (ERROR_SUCCESS == rc)
{
DWORD nLen = nMaxSubKeyLen;
rc = RegEnumKeyExA(
rc = RegEnumKeyExW(
hKey,
0, // always index zero
SubKey,
@ -103,7 +103,7 @@ bool DeleteRegistryKey(HKEY RootKey, const char* KeyName)
if (ERROR_NO_MORE_ITEMS == rc)
{
rc = RegDeleteKeyA(RootKey, KeyName);
rc = RegDeleteKeyW(RootKey, KeyName);
break;
}
else if (rc == ERROR_SUCCESS)
@ -123,18 +123,19 @@ bool DeleteRegistryKey(HKEY RootKey, const char* KeyName)
/** May be used to determine if the specified registry key has subkeys
The function returns true on success else if an error occurs false
*/
bool HasSubkeysRegistryKey(HKEY RootKey, const char* KeyName, /* out */ bool& bResult)
bool HasSubkeysRegistryKey(HKEY RootKey, const wchar_t* KeyName, /* out */ bool& bResult)
{
HKEY hKey;
LONG rc = RegOpenKeyExA(RootKey, KeyName, 0, KEY_READ, &hKey);
LONG rc = RegOpenKeyExW(RootKey, KeyName, 0, KEY_READ, &hKey);
if (ERROR_SUCCESS == rc)
{
DWORD nSubKeys = 0;
rc = RegQueryInfoKeyA(hKey, nullptr, nullptr, nullptr, &nSubKeys, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
rc = RegQueryInfoKeyW(hKey, nullptr, nullptr, nullptr, &nSubKeys, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
RegCloseKey(hKey);
bResult = (nSubKeys > 0);
}
@ -142,28 +143,26 @@ bool HasSubkeysRegistryKey(HKEY RootKey, const char* KeyName, /* out */ bool& bR
}
// Convert a CLSID to a char string.
std::string ClsidToString(const CLSID& clsid)
std::wstring ClsidToString(const CLSID& clsid)
{
// Get CLSID
LPOLESTR wszCLSID = nullptr;
StringFromCLSID(clsid, &wszCLSID);
char buff[39];
// Covert from wide characters to non-wide.
wcstombs(buff, wszCLSID, sizeof(buff));
std::wstring sResult = wszCLSID;
// Free memory.
CoTaskMemFree(wszCLSID) ;
return std::string(buff);
return sResult;
}
bool QueryRegistryKey(HKEY RootKey, const char* KeyName, const char* ValueName, char *pszData, DWORD dwBufLen)
bool QueryRegistryKey(HKEY RootKey, const wchar_t* KeyName, const wchar_t* ValueName, wchar_t *pszData, DWORD dwBufLen)
{
HKEY hKey;
int rc = RegOpenKeyExA(
int rc = RegOpenKeyExW(
RootKey,
KeyName,
0,
@ -172,8 +171,9 @@ bool QueryRegistryKey(HKEY RootKey, const char* KeyName, const char* ValueName,
if (ERROR_SUCCESS == rc)
{
rc = RegQueryValueExA(
hKey, ValueName, nullptr, nullptr, reinterpret_cast<LPBYTE>(pszData),&dwBufLen);
DWORD dwBytes = dwBufLen * sizeof(*pszData);
rc = RegQueryValueExW(
hKey, ValueName, nullptr, nullptr, reinterpret_cast<LPBYTE>(pszData),&dwBytes);
RegCloseKey(hKey);
}

View File

@ -87,7 +87,7 @@ std::wstring GetResString(int ResId)
int rc = LoadStringW( GetModuleHandleW(MODULE_NAME), ResId, szResStr, sizeof(szResStr) );
OutputDebugStringFormatA( "GetResString: read %d chars\n", rc );
OutputDebugStringFormatW( L"GetResString: read %d chars\n", rc );
// OSL_ENSURE(rc, "String resource not found");
return std::wstring(szResStr);
@ -100,10 +100,10 @@ bool is_windows_xp_or_above()
#ifdef _WIN32_WINNT_WINBLUE
return IsWindowsXPOrGreater();
#else
OSVERSIONINFO osvi;
OSVERSIONINFOW osvi;
ZeroMemory(&osvi, sizeof(osvi));
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
GetVersionExW(&osvi);
// LLA: check for windows xp or above (Vista)
if (osvi.dwMajorVersion > 5 ||

View File

@ -27,7 +27,7 @@ CSimpleMapi::CSimpleMapi() :
m_lpfnMapiLogoff(nullptr),
m_lpfnMapiSendMail(nullptr)
{
m_hMapiDll = LoadLibrary("mapi32.dll");
m_hMapiDll = LoadLibraryW(L"mapi32.dll");
if ((m_hMapiDll == INVALID_HANDLE_VALUE) || (m_hMapiDll == nullptr))
throw std::runtime_error("Couldn't load MAPI library");

View File

@ -56,7 +56,7 @@ Reference<XSimpleMailClient> SAL_CALL CSmplMailSuppl::querySimpleMailClient()
/* We just try to load the MAPI dll as a test
if a mail client is available */
Reference<XSimpleMailClient> xSmplMailClient;
HMODULE handle = LoadLibrary("mapi32.dll");
HMODULE handle = LoadLibraryW(L"mapi32.dll");
if ((handle != INVALID_HANDLE_VALUE) && (handle != nullptr))
{
FreeLibrary(handle);

View File

@ -351,7 +351,7 @@ struct stricmp
IOException if the specified file doesn't exist
AccessViolationException if read access to the file is denied
*/
bool ZipFile::IsZipFile(const std::string& /*FileName*/)
bool ZipFile::IsZipFile(const std::wstring& /*FileName*/)
{
return true;
}
@ -377,7 +377,7 @@ bool ZipFile::IsZipFile(void* /*stream*/)
IOException if the specified file doesn't exist or is no zip file
AccessViolationException if read access to the file is denied
*/
bool ZipFile::IsValidZipFileVersionNumber(const std::string& /*FileName*/)
bool ZipFile::IsValidZipFileVersionNumber(const std::wstring& /*FileName*/)
{
return true;
}
@ -400,7 +400,7 @@ bool ZipFile::IsValidZipFileVersionNumber(void* /* stream*/)
WrongZipVersionException if the zip file cannot be uncompressed
with the used zlib version
*/
ZipFile::ZipFile(const std::string &FileName) :
ZipFile::ZipFile(const std::wstring &FileName) :
m_pStream(nullptr),
m_bShouldFree(true)
{