本文整理汇总了C++中GetModuleFileNameW函数的典型用法代码示例。如果您正苦于以下问题:C++ GetModuleFileNameW函数的具体用法?C++ GetModuleFileNameW怎么用?C++ GetModuleFileNameW使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetModuleFileNameW函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetModuleFileNameA
/*
** Implementation of GetModuleFileNameA - requires wide to sbcs char conversion
*/
RTEXP DWORD GetModuleFileNameA( HMODULE hModule, char* lpFilename, DWORD nSize ) {
GetModuleFileNameW(hModule, wbuffer, BUFSIZ);
return(WideCharToMultiByte(CP_ACP, (DWORD)NULL, wbuffer, -1, lpFilename, nSize, NULL, NULL));
}
示例2: MyAssertDumpToFile
void MyAssertDumpToFile(const wchar_t* pszFile, int nLine, const wchar_t* pszTest)
{
wchar_t dmpfile[MAX_PATH+64] = L"", szVer4[8] = L"", szLine[64];
typedef HRESULT (WINAPI* SHGetFolderPath_t)(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
HMODULE hShell = LoadLibrary(L"shell32.dll");
SHGetFolderPath_t shGetFolderPath = hShell ? (SHGetFolderPath_t)GetProcAddress(hShell, "SHGetFolderPathW") : NULL;
HRESULT hrc = shGetFolderPath ? shGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0/*SHGFP_TYPE_CURRENT*/, dmpfile) : E_FAIL;
if (hShell) FreeLibrary(hShell);
if (FAILED(hrc))
{
memset(dmpfile, 0, sizeof(dmpfile));
if (!GetTempPath(MAX_PATH, dmpfile) || !*dmpfile)
{
//pszError = L"CreateDumpForReport called, get desktop or temp folder failed";
return;
}
}
wcscat_c(dmpfile, (*dmpfile && dmpfile[lstrlen(dmpfile)-1] != L'\\') ? L"\\ConEmuTrap" : L"ConEmuTrap");
CreateDirectory(dmpfile, NULL);
int nLen = lstrlen(dmpfile);
lstrcpyn(szVer4, _T(MVV_4a), countof(szVer4));
static LONG snAutoIndex = 0;
LONG nAutoIndex = InterlockedIncrement(&snAutoIndex);
msprintf(dmpfile+nLen, countof(dmpfile)-nLen, L"\\Assert-%02u%02u%02u%s-%u-%u.txt", MVV_1, MVV_2, MVV_3, szVer4, GetCurrentProcessId(), nAutoIndex);
HANDLE hFile = CreateFile(dmpfile, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
//pszError = L"Failed to create dump file";
return;
}
DWORD nWrite;
msprintf(szLine, countof(szLine), L"CEAssert PID=%u TID=%u\r\nAssertion in ", GetCurrentProcessId(), GetCurrentThreadId());
nWrite = lstrlen(szLine)*2;
WriteFile(hFile, szLine, nWrite, &nWrite, NULL);
if (!GetModuleFileNameW(NULL, dmpfile, countof(dmpfile)-2))
lstrcpyn(dmpfile, L"<unknown>\r\n", countof(dmpfile));
else
wcscat_c(dmpfile, L"\r\n");
nWrite = lstrlen(dmpfile)*2;
WriteFile(hFile, dmpfile, nWrite, &nWrite, NULL);
// File.cpp: 123\r\n
if (pszFile)
{
nWrite = lstrlen(pszFile)*2;
WriteFile(hFile, pszFile, nWrite, &nWrite, NULL);
msprintf(szLine, countof(szLine), L": %i\r\n\r\n", nLine);
nWrite = lstrlen(szLine)*2;
WriteFile(hFile, szLine, nWrite, &nWrite, NULL);
}
if (pszTest)
{
nWrite = lstrlen(pszTest)*2;
WriteFile(hFile, pszTest, nWrite, &nWrite, NULL);
WriteFile(hFile, L"\r\n", 4, &nWrite, NULL);
}
CloseHandle(hFile);
}
示例3: _dbg_dbginit
extern "C" DLL_EXPORT const char* _dbg_dbginit()
{
if(!EngineCheckStructAlignment(UE_STRUCT_TITAN_ENGINE_CONTEXT, sizeof(TITAN_ENGINE_CONTEXT_t)))
return "Invalid TITAN_ENGINE_CONTEXT_t alignment!";
if(sizeof(TITAN_ENGINE_CONTEXT_t) != sizeof(REGISTERCONTEXT))
return "Invalid REGISTERCONTEXT alignment!";
dputs("Initializing wait objects...");
waitinitialize();
dputs("Initializing debugger...");
dbginit();
dputs("Initializing debugger functions...");
dbgfunctionsinit();
dputs("Setting JSON memory management functions...");
json_set_alloc_funcs(json_malloc, json_free);
dputs("Initializing capstone...");
Capstone::GlobalInitialize();
dputs("Initializing Yara...");
if(yr_initialize() != ERROR_SUCCESS)
return "Failed to initialize Yara!";
dputs("Getting directory information...");
wchar_t wszDir[deflen] = L"";
if(!GetModuleFileNameW(hInst, wszDir, deflen))
return "GetModuleFileNameW failed!";
char dir[deflen] = "";
strcpy_s(dir, StringUtils::Utf16ToUtf8(wszDir).c_str());
int len = (int)strlen(dir);
while(dir[len] != '\\')
len--;
dir[len] = 0;
strcpy_s(alloctrace, dir);
strcat_s(alloctrace, "\\alloctrace.txt");
DeleteFileW(StringUtils::Utf8ToUtf16(alloctrace).c_str());
setalloctrace(alloctrace);
strcpy_s(dbbasepath, dir); //debug directory
strcat_s(dbbasepath, "\\db");
CreateDirectoryW(StringUtils::Utf8ToUtf16(dbbasepath).c_str(), 0); //create database directory
char szLocalSymbolPath[MAX_PATH] = "";
strcpy_s(szLocalSymbolPath, dir);
strcat_s(szLocalSymbolPath, "\\symbols");
char cachePath[MAX_SETTING_SIZE];
if(!BridgeSettingGet("Symbols", "CachePath", cachePath) || !*cachePath)
{
strcpy_s(szSymbolCachePath, szLocalSymbolPath);
BridgeSettingSet("Symbols", "CachePath", ".\\symbols");
}
else
{
if (_strnicmp(cachePath, ".\\", 2) == 0)
{
strncpy_s(szSymbolCachePath, dir, _TRUNCATE);
strncat_s(szSymbolCachePath, cachePath + 1, _TRUNCATE);
}
else
{
// Trim the buffer to fit inside MAX_PATH
strncpy_s(szSymbolCachePath, cachePath, _TRUNCATE);
}
if(strstr(szSymbolCachePath, "http://") || strstr(szSymbolCachePath, "https://"))
{
if(Script::Gui::MessageYesNo("It is strongly discouraged to use symbol servers in your path directly (use the store option instead).\n\nDo you want me to fix this?"))
{
strcpy_s(szSymbolCachePath, szLocalSymbolPath);
BridgeSettingSet("Symbols", "CachePath", ".\\symbols");
}
}
}
dputs(szSymbolCachePath);
SetCurrentDirectoryW(StringUtils::Utf8ToUtf16(dir).c_str());
dputs("Allocating message stack...");
gMsgStack = MsgAllocStack();
if(!gMsgStack)
return "Could not allocate message stack!";
dputs("Initializing global script variables...");
varinit();
dputs("Registering debugger commands...");
registercommands();
dputs("Starting command loop...");
hCommandLoopThread = CreateThread(0, 0, DbgCommandLoopThread, 0, 0, 0);
char plugindir[deflen] = "";
strcpy_s(plugindir, dir);
strcat_s(plugindir, "\\plugins");
CreateDirectoryW(StringUtils::Utf8ToUtf16(plugindir).c_str(), 0);
dputs("Loading plugins...");
pluginload(plugindir);
dputs("Handling command line...");
//handle command line
int argc = 0;
wchar_t** argv = CommandLineToArgvW(GetCommandLineW(), &argc);
if(argc == 2) //we have an argument
{
String str = "init \"";
str += StringUtils::Utf16ToUtf8(argv[1]);
str += "\"";
DbgCmdExec(str.c_str());
}
else if(argc == 5) //4 arguments (JIT)
{
if(_wcsicmp(argv[1], L"-a") == 0 && !_wcsicmp(argv[3], L"-e"))
//.........这里部分代码省略.........
示例4: Perl_set_caret_X
void
Perl_set_caret_X(pTHX) {
GV* tmpgv = gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL, SVt_PV); /* $^X */
SV *const caret_x = GvSV(tmpgv);
#if defined(OS2)
sv_setpv(caret_x, os2_execname(aTHX));
#elif defined(USE_KERN_PROC_PATHNAME)
size_t size = 0;
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
if (sysctl(mib, 4, NULL, &size, NULL, 0) == 0
&& size > 0 && size < MAXPATHLEN * MAXPATHLEN) {
sv_grow(caret_x, size);
if (sysctl(mib, 4, SvPVX(caret_x), &size, NULL, 0) == 0
&& size > 2) {
SvPOK_only(caret_x);
SvCUR_set(caret_x, size - 1);
SvTAINT(caret_x);
return;
}
}
#elif defined(USE_NSGETEXECUTABLEPATH)
char buf[1];
uint32_t size = sizeof(buf);
_NSGetExecutablePath(buf, &size);
if (size < MAXPATHLEN * MAXPATHLEN) {
sv_grow(caret_x, size);
if (_NSGetExecutablePath(SvPVX(caret_x), &size) == 0) {
char *const tidied = realpath(SvPVX(caret_x), NULL);
if (tidied) {
sv_setpv(caret_x, tidied);
free(tidied);
} else {
SvPOK_only(caret_x);
SvCUR_set(caret_x, size);
}
return;
}
}
#elif defined(HAS_PROCSELFEXE)
char buf[MAXPATHLEN];
SSize_t len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
/* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
* it is impossible to know whether the result was truncated. */
if (len != -1) {
buf[len] = '\0';
}
/* On Playstation2 Linux V1.0 (kernel 2.2.1) readlink(/proc/self/exe)
includes a spurious NUL which will cause $^X to fail in system
or backticks (this will prevent extensions from being built and
many tests from working). readlink is not meant to add a NUL.
Normal readlink works fine.
*/
if (len > 0 && buf[len-1] == '\0') {
len--;
}
/* FreeBSD's implementation is acknowledged to be imperfect, sometimes
returning the text "unknown" from the readlink rather than the path
to the executable (or returning an error from the readlink). Any
valid path has a '/' in it somewhere, so use that to validate the
result. See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
*/
if (len > 0 && memchr(buf, '/', len)) {
sv_setpvn(caret_x, buf, len);
return;
}
#elif defined(WIN32)
char *ansi;
WCHAR widename[MAX_PATH];
GetModuleFileNameW(NULL, widename, sizeof(widename)/sizeof(WCHAR));
ansi = win32_ansipath(widename);
sv_setpv(caret_x, ansi);
win32_free(ansi);
return;
#else
/* Fallback to this: */
sv_setpv(caret_x, PL_origargv[0]);
#endif
}
示例5: main
int main(int argc, char* argv[]) {
#ifdef _WIN32
wchar_t exepath[MAX_PATH];
GetModuleFileNameW(NULL, exepath, MAX_PATH);
wchar_t* p = wcsrchr(exepath, '\\');
*p = '\0';
SetCurrentDirectoryW(exepath);
#endif //_WIN32
#ifdef _WIN32
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
evthread_use_windows_threads();
#else
evthread_use_pthreads();
#endif //_WIN32
ygo::Game _game;
ygo::mainGame = &_game;
if(!ygo::mainGame->Initialize())
return 0;
bool keep_on_return = false;
for(int i = 1; i < argc; ++i) {
if(argv[i][0] == '-' && argv[i][1] == 'e') {
char param[128];
GetParameter(param, &argv[i][2]);
ygo::dataManager.LoadDB(param);
}
if(!strcmp(argv[i], "-e")) { // extra database
++i;
char param[128];
GetParameter(param, &argv[i][0]);
ygo::dataManager.LoadDB(param);
continue;
} else if(!strcmp(argv[i], "-n")) { // nickName
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebNickName->setText(param);
continue;
} else if(!strcmp(argv[i], "-h")) { // Host address
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebJoinHost->setText(param);
continue;
} else if(!strcmp(argv[i], "-p")) { // host Port
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebJoinPort->setText(param);
continue;
} else if(!strcmp(argv[i], "-w")) { // host passWord
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebJoinPass->setText(param);
continue;
} else if(!strcmp(argv[i], "-k")) { // Keep on return
exit_on_return = false;
keep_on_return = true;
} else if(!strcmp(argv[i], "-j")) { // Join host
exit_on_return = !keep_on_return;
ClickButton(ygo::mainGame->btnLanMode);
ClickButton(ygo::mainGame->btnJoinHost);
break;
} else if(!strcmp(argv[i], "-d")) { // Deck
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnDeckEdit);
break;
} else if(!strcmp(argv[i], "-r")) { // Replay
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnReplayMode);
if(open_file)
ClickButton(ygo::mainGame->btnLoadReplay);
break;
} else if(!strcmp(argv[i], "-s")) { // Single
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnServerMode);
if(open_file)
ClickButton(ygo::mainGame->btnLoadSinglePlay);
break;
}
}
ygo::mainGame->MainLoop();
#ifdef _WIN32
WSACleanup();
//.........这里部分代码省略.........
示例6: set_windows_hook
/***********************************************************************
* set_windows_hook
*
* Implementation of SetWindowsHookExA and SetWindowsHookExW.
*/
static HHOOK set_windows_hook( INT id, HOOKPROC proc, HINSTANCE inst, DWORD tid, BOOL unicode )
{
HHOOK handle = 0;
WCHAR module[MAX_PATH];
DWORD len;
if (!proc)
{
SetLastError( ERROR_INVALID_FILTER_PROC );
return 0;
}
if (tid) /* thread-local hook */
{
if (id == WH_JOURNALRECORD ||
id == WH_JOURNALPLAYBACK ||
id == WH_KEYBOARD_LL ||
id == WH_MOUSE_LL ||
id == WH_SYSMSGFILTER)
{
/* these can only be global */
SetLastError( ERROR_INVALID_PARAMETER );
return 0;
}
}
else /* system-global hook */
{
if (id == WH_KEYBOARD_LL || id == WH_MOUSE_LL) inst = 0;
else if (!inst)
{
SetLastError( ERROR_HOOK_NEEDS_HMOD );
return 0;
}
}
if (inst && (!(len = GetModuleFileNameW( inst, module, MAX_PATH )) || len >= MAX_PATH))
{
SetLastError( ERROR_INVALID_PARAMETER );
return 0;
}
SERVER_START_REQ( set_hook )
{
req->id = id;
req->pid = 0;
req->tid = tid;
req->event_min = EVENT_MIN;
req->event_max = EVENT_MAX;
req->flags = WINEVENT_INCONTEXT;
req->unicode = unicode;
if (inst) /* make proc relative to the module base */
{
req->proc = wine_server_client_ptr( (void *)((char *)proc - (char *)inst) );
wine_server_add_data( req, module, strlenW(module) * sizeof(WCHAR) );
}
else req->proc = wine_server_client_ptr( proc );
if (!wine_server_call_err( req ))
{
handle = wine_server_ptr_handle( reply->handle );
get_user_thread_info()->active_hooks = reply->active_hooks;
}
}
SERVER_END_REQ;
TRACE( "%s %p %x -> %p\n", hook_names[id-WH_MINHOOK], proc, tid, handle );
return handle;
}
示例7: DbgAllocReport
//.........这里部分代码省略.........
(unsigned)(g_TopAllocators[i].m_TotalBytes / g_TopAllocators[i].m_Count)));
}
}
// Print out info for all leaked packets.
if (g_DetectLeaks) {
DbgAllocHeader *h = g_AllocListFirst;
int fHaveLeaks = (h!=NULL);
if (h) {
// Tell the Log we had memory leaks
LOG((LF_DBGALLOC, LL_ALWAYS, "\n"));
LOG((LF_DBGALLOC, LL_ALWAYS, "Detected memory leaks!\n"));
LOG((LF_DBGALLOC, LL_ALWAYS, "Leaked packets :\n"));
// Tell the console we had memory leaks
if (fDoPrintf)
{
printf("Detected memory leaks!\n");
if (pString != NULL)
printf("%s\n", pString);
printf("Leaked packets :\n");
}
}
while (h) {
char buffer1[132];
char buffer2[32];
sprintf(buffer1, "#%u %08X:%u ", h->m_SN, CDA_HEADER_TO_DATA(h), h->m_Length);
unsigned i;
for (i = 0; i < 16; i++) {
if (i < h->m_Length)
sprintf(buffer2, "%02X", (BYTE)CDA_DATA(h, i));
else
strcpy(buffer2, " ");
if ((i % 4) == 3)
strcat(buffer2, " ");
strcat(buffer1, buffer2);
}
for (i = 0; i < min(16, h->m_Length); i++) {
sprintf(buffer2, "%c", (CDA_DATA(h, i) < 32) || (CDA_DATA(h, i) > 127) ? '.' : CDA_DATA(h, i));
strcat(buffer1, buffer2);
}
LOG((LF_DBGALLOC, LL_ALWAYS, "%s\n", buffer1));
if (fDoPrintf)
printf("%s\n", buffer1);
if (g_CallStackDepth == 1) {
LOG((LF_DBGALLOC, LL_ALWAYS, " Allocated at %08X %s\n",
CDA_ALLOC_STACK(h, 0), DbgSymbolize(CDA_ALLOC_STACK(h, 0))));
if (fDoPrintf)
printf(" Allocated at %08X %s\n",
CDA_ALLOC_STACK(h, 0), DbgSymbolize(CDA_ALLOC_STACK(h, 0)));
} else {
LOG((LF_DBGALLOC, LL_ALWAYS, " Allocation call stack:\n"));
if (fDoPrintf)
printf(" Allocation call stack:\n");
for (unsigned i = 0; i < g_CallStackDepth; i++) {
if (CDA_ALLOC_STACK(h, i) == NULL)
break;
LOG((LF_DBGALLOC, LL_ALWAYS, " %08X %s\n",
CDA_ALLOC_STACK(h, i), DbgSymbolize(CDA_ALLOC_STACK(h, i))));
if (fDoPrintf)
printf(" %08X %s\n",
CDA_ALLOC_STACK(h, i), DbgSymbolize(CDA_ALLOC_STACK(h, i)));
}
}
wchar_t buf[256];
GetModuleFileNameW(h->m_hmod, buf, 256);
LOG((LF_DBGALLOC, LL_ALWAYS, " Base, name: %08X %S\n\n", h->m_hmod, buf));
if (fDoPrintf)
printf(" Base, name: %08X %S\n\n", h->m_hmod, buf);
h = h->m_Next;
}
if (fDoPrintf)
fflush(stdout);
if (fHaveLeaks && g_AssertOnLeaks)
_ASSERTE(!"Detected memory leaks!");
}
if (g_LogStats || g_LogDist || g_DetectLeaks || g_UsageByAllocator) {
LOG((LF_DBGALLOC, LL_ALWAYS, "\n"));
LOG((LF_DBGALLOC, LL_ALWAYS, "------------------------------\n"));
}
if (fDone)
{
DbgUnloadSymbols();
DeleteCriticalSection(&g_AllocMutex);
// We won't be doing any more of our debug allocation stuff
g_DbgEnabled=0;
}
}
示例8: RuntimeHost_GetDefaultDomain
static HRESULT RuntimeHost_GetDefaultDomain(RuntimeHost *This, const WCHAR *config_path, MonoDomain **result)
{
WCHAR config_dir[MAX_PATH];
WCHAR base_dir[MAX_PATH];
char *base_dirA, *config_pathA, *slash;
HRESULT res=S_OK;
EnterCriticalSection(&This->lock);
if (This->default_domain) goto end;
res = RuntimeHost_AddDefaultDomain(This, &This->default_domain);
if (!config_path)
{
DWORD len = ARRAY_SIZE(config_dir);
static const WCHAR machine_configW[] = {'\\','C','O','N','F','I','G','\\','m','a','c','h','i','n','e','.','c','o','n','f','i','g',0};
res = ICLRRuntimeInfo_GetRuntimeDirectory(&This->version->ICLRRuntimeInfo_iface,
config_dir, &len);
if (FAILED(res))
goto end;
lstrcatW(config_dir, machine_configW);
config_path = config_dir;
}
config_pathA = WtoA(config_path);
if (!config_pathA)
{
res = E_OUTOFMEMORY;
goto end;
}
GetModuleFileNameW(NULL, base_dir, ARRAY_SIZE(base_dir));
base_dirA = WtoA(base_dir);
if (!base_dirA)
{
HeapFree(GetProcessHeap(), 0, config_pathA);
res = E_OUTOFMEMORY;
goto end;
}
slash = strrchr(base_dirA, '\\');
if (slash)
*(slash + 1) = 0;
TRACE("setting base_dir: %s, config_path: %s\n", base_dirA, config_pathA);
mono_domain_set_config(This->default_domain, base_dirA, config_pathA);
HeapFree(GetProcessHeap(), 0, config_pathA);
HeapFree(GetProcessHeap(), 0, base_dirA);
end:
*result = This->default_domain;
LeaveCriticalSection(&This->lock);
return res;
}
示例9: ATLTRACE
HRESULT CCodeCoverage::OpenCoverInitialise(IUnknown *pICorProfilerInfoUnk){
ATLTRACE(_T("::OpenCoverInitialise"));
OLECHAR szGuid[40]={0};
int nCount = ::StringFromGUID2(CLSID_CodeCoverage, szGuid, 40);
RELTRACE(L" ::Initialize(...) => CLSID == %s", szGuid);
//::OutputDebugStringW(szGuid);
WCHAR szExeName[MAX_PATH];
GetModuleFileNameW(NULL, szExeName, MAX_PATH);
RELTRACE(L" ::Initialize(...) => EXE = %s", szExeName);
WCHAR szModuleName[MAX_PATH];
GetModuleFileNameW(_AtlModule.m_hModule, szModuleName, MAX_PATH);
RELTRACE(L" ::Initialize(...) => PROFILER = %s", szModuleName);
//::OutputDebugStringW(szModuleName);
if (g_pProfiler!=NULL)
RELTRACE(_T("Another instance of the profiler is running under this process..."));
m_profilerInfo = pICorProfilerInfoUnk;
if (m_profilerInfo != NULL) ATLTRACE(_T(" ::Initialize (m_profilerInfo OK)"));
if (m_profilerInfo == NULL) return E_FAIL;
m_profilerInfo2 = pICorProfilerInfoUnk;
if (m_profilerInfo2 != NULL) ATLTRACE(_T(" ::Initialize (m_profilerInfo2 OK)"));
if (m_profilerInfo2 == NULL) return E_FAIL;
m_profilerInfo3 = pICorProfilerInfoUnk;
#ifndef _TOOLSETV71
m_profilerInfo4 = pICorProfilerInfoUnk;
#endif
ZeroMemory(&m_runtimeVersion, sizeof(m_runtimeVersion));
if (m_profilerInfo3 != NULL)
{
ATLTRACE(_T(" ::Initialize (m_profilerInfo3 OK)"));
ZeroMemory(&m_runtimeVersion, sizeof(m_runtimeVersion));
m_profilerInfo3->GetRuntimeInformation(NULL, &m_runtimeType,
&m_runtimeVersion.usMajorVersion,
&m_runtimeVersion.usMinorVersion,
&m_runtimeVersion.usBuildNumber,
&m_runtimeVersion.usRevisionNumber, 0, NULL, NULL);
ATLTRACE(_T(" ::Initialize (Runtime %d)"), m_runtimeType);
}
TCHAR key[1024] = {0};
::GetEnvironmentVariable(_T("OpenCover_Profiler_Key"), key, 1024);
RELTRACE(_T(" ::Initialize(...) => key = %s"), key);
TCHAR ns[1024] = {0};
::GetEnvironmentVariable(_T("OpenCover_Profiler_Namespace"), ns, 1024);
ATLTRACE(_T(" ::Initialize(...) => ns = %s"), ns);
TCHAR instrumentation[1024] = {0};
::GetEnvironmentVariable(_T("OpenCover_Profiler_Instrumentation"), instrumentation, 1024);
ATLTRACE(_T(" ::Initialize(...) => instrumentation = %s"), instrumentation);
TCHAR threshold[1024] = {0};
::GetEnvironmentVariable(_T("OpenCover_Profiler_Threshold"), threshold, 1024);
m_threshold = _tcstoul(threshold, NULL, 10);
ATLTRACE(_T(" ::Initialize(...) => threshold = %ul"), m_threshold);
TCHAR tracebyTest[1024] = {0};
::GetEnvironmentVariable(_T("OpenCover_Profiler_TraceByTest"), tracebyTest, 1024);
m_tracingEnabled = _tcslen(tracebyTest) != 0;
ATLTRACE(_T(" ::Initialize(...) => tracingEnabled = %s (%s)"), m_tracingEnabled ? _T("true") : _T("false"), tracebyTest);
m_useOldStyle = (tstring(instrumentation) == _T("oldSchool"));
if (!m_host.Initialise(key, ns))
{
RELTRACE(_T(" ::Initialize => Failed to initialise the profiler communications -> GetLastError() => %d"), ::GetLastError());
return E_FAIL;
}
OpenCoverSupportInitialize(pICorProfilerInfoUnk);
if (m_chainedProfiler == NULL){
DWORD dwMask = AppendProfilerEventMask(0);
COM_FAIL_MSG_RETURN_ERROR(m_profilerInfo2->SetEventMask(dwMask),
_T(" ::Initialize(...) => SetEventMask => 0x%X"));
}
if(m_profilerInfo3 != NULL)
{
COM_FAIL_MSG_RETURN_ERROR(m_profilerInfo3->SetFunctionIDMapper2(FunctionMapper2, this),
_T(" ::Initialize(...) => SetFunctionIDMapper2 => 0x%X"));
}
else
{
COM_FAIL_MSG_RETURN_ERROR(m_profilerInfo2->SetFunctionIDMapper(FunctionMapper),
_T(" ::Initialize(...) => SetFunctionIDMapper => 0x%X"));
}
g_pProfiler = this;
#ifndef _TOOLSETV71
//.........这里部分代码省略.........
示例10: GetCurrentDir
// Returns the current directory
std::string GetCurrentDir()
{
// Get the current working directory (getcwd uses malloc)
#ifdef _WIN32
wchar_t *dir;
if (!(dir = _wgetcwd(nullptr, 0))) {
#else
char *dir;
if (!(dir = getcwd(nullptr, 0))) {
#endif
LOG_ERROR(Common_Filesystem, "GetCurrentDirectory failed: %s",
GetLastErrorMsg());
return nullptr;
}
#ifdef _WIN32
std::string strDir = Common::UTF16ToUTF8(dir);
#else
std::string strDir = dir;
#endif
free(dir);
return strDir;
}
// Sets the current directory to the given directory
bool SetCurrentDir(const std::string &directory)
{
#ifdef _WIN32
return _wchdir(Common::UTF8ToUTF16W(directory).c_str()) == 0;
#else
return chdir(directory.c_str()) == 0;
#endif
}
#if defined(__APPLE__)
std::string GetBundleDirectory()
{
CFURLRef BundleRef;
char AppBundlePath[MAXPATHLEN];
// Get the main bundle for the app
BundleRef = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFStringRef BundlePath = CFURLCopyFileSystemPath(BundleRef, kCFURLPOSIXPathStyle);
CFStringGetFileSystemRepresentation(BundlePath, AppBundlePath, sizeof(AppBundlePath));
CFRelease(BundleRef);
CFRelease(BundlePath);
return AppBundlePath;
}
#endif
#ifdef _WIN32
std::string& GetExeDirectory()
{
static std::string exe_path;
if (exe_path.empty())
{
wchar_t wchar_exe_path[2048];
GetModuleFileNameW(nullptr, wchar_exe_path, 2048);
exe_path = Common::UTF16ToUTF8(wchar_exe_path);
exe_path = exe_path.substr(0, exe_path.find_last_of('\\'));
}
return exe_path;
}
#else
/**
* @return The user’s home directory on POSIX systems
*/
static const std::string& GetHomeDirectory() {
static std::string home_path;
if (home_path.empty()) {
const char* envvar = getenv("HOME");
if (envvar) {
home_path = envvar;
} else {
auto pw = getpwuid(getuid());
ASSERT_MSG(pw, "$HOME isn’t defined, and the current user can’t be found in /etc/passwd.");
home_path = pw->pw_dir;
}
}
return home_path;
}
/**
* Follows the XDG Base Directory Specification to get a directory path
* @param envvar The XDG environment variable to get the value from
* @return The directory path
* @sa http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
*/
static const std::string GetUserDirectory(const std::string& envvar) {
const char* directory = getenv(envvar.c_str());
std::string user_dir;
if (directory) {
user_dir = directory;
} else {
std::string subdirectory;
if (envvar == "XDG_DATA_HOME")
subdirectory = DIR_SEP ".local" DIR_SEP "share";
else if (envvar == "XDG_CONFIG_HOME")
subdirectory = DIR_SEP ".config";
//.........这里部分代码省略.........
示例11: fill_pathname_application_path
void fill_pathname_application_path(char *s, size_t len)
{
size_t i;
#ifdef __APPLE__
CFBundleRef bundle = CFBundleGetMainBundle();
#endif
#ifdef _WIN32
DWORD ret;
wchar_t wstr[PATH_MAX_LENGTH] = {0};
#endif
#ifdef __HAIKU__
image_info info;
int32_t cookie = 0;
#endif
(void)i;
if (!len)
return;
#ifdef _WIN32
#ifdef LEGACY_WIN32
ret = GetModuleFileNameA(GetModuleHandle(NULL), s, len);
#else
ret = GetModuleFileNameW(GetModuleHandle(NULL), wstr, ARRAY_SIZE(wstr));
if (*wstr)
{
char *str = utf16_to_utf8_string_alloc(wstr);
if (str)
{
strlcpy(s, str, len);
free(str);
}
}
#endif
s[ret] = '\0';
#elif defined(__APPLE__)
if (bundle)
{
CFURLRef bundle_url = CFBundleCopyBundleURL(bundle);
CFStringRef bundle_path = CFURLCopyPath(bundle_url);
CFStringGetCString(bundle_path, s, len, kCFStringEncodingUTF8);
CFRelease(bundle_path);
CFRelease(bundle_url);
retro_assert(strlcat(s, "nobin", len) < len);
return;
}
#elif defined(__HAIKU__)
while (get_next_image_info(0, &cookie, &info) == B_OK)
{
if (info.type == B_APP_IMAGE)
{
strlcpy(s, info.name, len);
return;
}
}
#elif defined(__QNX__)
char *buff = malloc(len);
if(_cmdname(buff))
strlcpy(s, buff, len);
free(buff);
#else
{
pid_t pid;
static const char *exts[] = { "exe", "file", "path/a.out" };
char link_path[255];
link_path[0] = *s = '\0';
pid = getpid();
/* Linux, BSD and Solaris paths. Not standardized. */
for (i = 0; i < ARRAY_SIZE(exts); i++)
{
ssize_t ret;
snprintf(link_path, sizeof(link_path), "/proc/%u/%s",
(unsigned)pid, exts[i]);
ret = readlink(link_path, s, len - 1);
if (ret >= 0)
{
s[ret] = '\0';
return;
}
}
}
#endif
}
示例12: DllMain
/// <summary>
/// Main entry point for the dll.
/// </summary>
/// <param name="hModule">Handle to the DLL module.</param>
/// <param name="ul_reason_for_call">Reason for calling function.</param>
/// <param name="lpReserved">Reserved.</param>
/// <returns>TRUE if it succeeds or FALSE if initialization fails.</returns>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
DWORD nchars;
wchar_t* last;
BOOL ret;
ret = TRUE;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
// hModule - The value is the base address of the DLL.
// The HINSTANCE of a DLL is the same as the HMODULE of the DLL,
// so hinstDLL can be used in calls to functions that require a module handle.
nchars = GetModuleFileNameW ((HINSTANCE)hModule, module, MAX_PATH);
if (0 == nchars)
ret = FALSE;
else
{
// scan the string for the last occurrence of a slash
wcscpy (home_dir, module);
last = wcsrchr (home_dir, L'\\');
if (NULL == last)
ret = FALSE;
else
{
last++; // move past the slash
*last = L'\0'; // null terminate it there
wcscpy (com_dir, home_dir);
wcscat (com_dir, L"com\\");
}
#ifdef _DEBUG
// Look for a "debug.images" file in $HOME for debug message control.
char* cmodule;
wide_to_multibyte(cmodule, module);
char * argv[] = { cmodule, 0 };
int argc = 1;
debug_init(&argc, argv);
#endif
}
tlsIndex = TlsAlloc();
ut_thread_mutex_init();
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
TlsFree(tlsIndex);
ut_thread_mutex_destroy();
break;
}
return (ret);
}
示例13: memset
BOOL CYYManager::InitFactory()
{
WCHAR wzSelfPath[MAX_PATH];
memset( wzSelfPath, 0, sizeof(wzSelfPath) );
GetModuleFileNameW( NULL, wzSelfPath, sizeof(wzSelfPath) );
LPWSTR lpInsertPos = wcsrchr( wzSelfPath, L'\\' );
*lpInsertPos = L'\0';
lstrcatW( wzSelfPath, L"\\pipFactory.dll" );
m_hFactory = LoadLibraryW( wzSelfPath );
if( m_hFactory == NULL ) return FALSE;
m_pfnInitInterface = (PFN_INITYYINTERFACE)GetProcAddress( m_hFactory, "YYPIP_InitInterface" );
if( m_pfnInitInterface == NULL ) return FALSE;
m_pfnGetInterface = (PFN_GETYYINTERFACE)GetProcAddress( m_hFactory, "YYPIP_GetInterface" );
if( m_pfnGetInterface == NULL ) return FALSE;
//call factory init func
if( m_pfnInitInterface() == -1 ) return FALSE;
/////////////////////////////////////////////////////////////////////////
//all game must be call this func to show yy window
m_pfnRunService = (PFN_RUNSERVICE)m_pfnGetInterface( "YYPIP_RunService" );
if( m_pfnRunService == NULL ) return FALSE;
m_pfnLoadInGame = (PFN_LOADINGAME)m_pfnGetInterface( "YYPIP_LoadInGame" );
if( m_pfnLoadInGame == NULL ) return FALSE;
m_pfnFreeGame = (PFN_FREEINGAME)m_pfnGetInterface( "YYPIP_FreeInGame" );
if( m_pfnFreeGame == NULL ) return FALSE;
m_pfnCheckClient = (PFN_CHECKCLIENT)m_pfnGetInterface( "YYPIP_CheckYYClient" );
if( m_pfnCheckClient == NULL ) return FALSE;
m_pfnIsPipSuccess = (PFN_ISPIPSUCCESS)m_pfnGetInterface( "YYPIP_IsPipRunSuccess" );
if( m_pfnIsPipSuccess == NULL ) return FALSE;
/////////////////////////////////////////////////////////////////////////
//sometimes call this func to show yy window
m_pfnMouseInput = (PFN_MOUSEINPUT)m_pfnGetInterface( "YYPIP_MouseInput" );
if( m_pfnMouseInput == NULL ) return FALSE;
m_pfnSetMainWnd = (PFN_SETMAINWND)m_pfnGetInterface( "YYPIP_SetMainWnd" );
if( m_pfnSetMainWnd == NULL ) return FALSE;
m_pfnCreateUI = (PFN_CREATEUI)m_pfnGetInterface( "YYPIP_CreateUI" );
if( m_pfnCreateUI == NULL ) return FALSE;
m_pfnDestoryUI = (PFN_DESTORYUI)m_pfnGetInterface( "YYPIP_DestoryUI" );
if( m_pfnDestoryUI == NULL ) return FALSE;
m_pfnRenderGUI = (PFN_RENDERGUI)m_pfnGetInterface( "YYPIP_RenderGUI" );
if( m_pfnRenderGUI == NULL ) return FALSE;
m_pfnGameWndMsg = (PFN_GAMEWNDMSG)m_pfnGetInterface( "YYPIP_GameWndMessage" );
if( m_pfnGameWndMsg == NULL ) return FALSE;
/////////////////////////////////////////////////////////////////////////
//game used yy voice channel
m_pfnJoinChannel = (PFN_JOINCHANNEL)m_pfnGetInterface( "YYPIP_JoinChannel" );
if( m_pfnJoinChannel == NULL ) return FALSE;
m_pfnSetTeamAdmin = (PFN_SETTEAMADMIN)m_pfnGetInterface( "YYPIP_SetTeamAdmin" );
if( m_pfnSetTeamAdmin == NULL ) return FALSE;
m_pfnSetUserName = (PFN_SETUSERNAME)m_pfnGetInterface( "YYPIP_SetUserName" );
if( m_pfnSetUserName == NULL ) return FALSE;
m_pfnJoinTeam = (PFN_JOINTEAM)m_pfnGetInterface( "YYPIP_JoinTeam" );
if( m_pfnJoinTeam == NULL ) return FALSE;
m_pfnSetTeamDevice = (PFN_SETTEAMDEVICE)m_pfnGetInterface( "YYPIP_SetTeamDevice" );
if( m_pfnSetTeamDevice == NULL ) return FALSE;
m_pfnSetTeamVoice = (PFN_SETTEAMVOICE)m_pfnGetInterface( "YYPIP_SetTeamVoice" );
if( m_pfnSetTeamVoice == NULL ) return FALSE;
m_pfnLockTeamVoice = (PFN_LOCKTEAMVOICE)m_pfnGetInterface( "YYPIP_LockTeamVoice" );
if( m_pfnLockTeamVoice == NULL ) return FALSE;
/////////////////////////////////////////////////////////////////////////
//game to channel yy voice window
m_pfnGetPipShow = (PFN_GETPIPSHOW)m_pfnGetInterface( "YYPIP_GetPipShow" );
if( m_pfnGetPipShow == NULL ) return FALSE;
m_pfnSetPipShow = (PFN_SETPIPSHOW)m_pfnGetInterface( "YYPIP_SetPipShow" );
if( m_pfnSetPipShow == NULL ) return FALSE;
m_pfnSetMsgShow = (PFN_SETMSGSHOW)m_pfnGetInterface( "YYPIP_SetMsgShow" );
if( m_pfnSetMsgShow == NULL ) return FALSE;
m_pfnMouseShow = (PFN_SETMOUSESHOW)m_pfnGetInterface( "YYPIP_SetMouseShow" );
if( m_pfnMouseShow == NULL ) return FALSE;
m_pfnLockWnd = (PFN_LOCKWINDOW)m_pfnGetInterface( "YYPIP_LockWindow" );
if( m_pfnLockWnd == NULL ) return FALSE;
m_pfnMoveWnd = (PFN_MOVEWINDOW)m_pfnGetInterface( "YYPIP_MoveWindow" );
//.........这里部分代码省略.........
示例14: DllRegisterServer
//------------------------------------------------------------------------------
// DllRegisterServer
//------------------------------------------------------------------------------
STDAPI DllRegisterServer()
{
HKEY hKey = NULL;
HMODULE hModule = NULL;
HRESULT hr = S_OK;
LONG lResult = ERROR_SUCCESS;
WCHAR szFilename[MAX_PATH] = { 0 };
WCHAR szKey[MAX_PATH] = { 0 };
WCHAR szCLSID[OLEGUID_LEN_CCH] = { 0 };
//
// Grab the fully qualified path to this dll
//
hModule = GetModuleHandleW(L"PrinterServiceFuncDiscovery");
if (NULL == hModule)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
else if (0 == GetModuleFileNameW(hModule, szFilename, ARRAYSIZE(szFilename)))
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
//
// Register the COM object in the registry
//
if (S_OK == hr &&
0 == StringFromGUID2(CLSID_SsysPrinterSvcProxy, szCLSID, ARRAYSIZE(szCLSID)))
{
hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
if (S_OK == hr)
{
hr = StringCchPrintfW(szKey, ARRAYSIZE(szKey), L"CLSID\\%s", szCLSID);
}
if (S_OK == hr)
{
lResult = RegCreateKeyExW(
HKEY_CLASSES_ROOT,
szKey,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,
NULL,
&hKey,
NULL
);
hr = HRESULT_FROM_WIN32(lResult);
}
if (S_OK == hr)
{
lResult = RegSetValueExW(
hKey,
NULL,
0,
REG_SZ,
(BYTE*)OBJECT_NAME,
(static_cast<DWORD>(wcslen(OBJECT_NAME)) + 1)*sizeof(WCHAR)
);
hr = HRESULT_FROM_WIN32(lResult);
}
RegCloseKey(hKey);
if (S_OK == hr)
{
hr = StringCchPrintfW(
szKey,
ARRAYSIZE(szKey),
L"CLSID\\%s\\InProcServer32",
szCLSID
);
}
if (S_OK == hr)
{
lResult = RegCreateKeyExW(
HKEY_CLASSES_ROOT,
szKey,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,
NULL,
&hKey,
NULL
);
hr = HRESULT_FROM_WIN32(lResult);
}
if (S_OK == hr)
{
lResult = RegSetValueExW(
hKey,
//.........这里部分代码省略.........
示例15: UpdateServiceDescription
/**
* Updates the service description with what is stored in updater.ini
* at the same path as the currently executing module binary.
*
* @param serviceHandle A handle to an opened service with
* SERVICE_CHANGE_CONFIG access right
* @param TRUE on succcess.
*/
BOOL
UpdateServiceDescription(SC_HANDLE serviceHandle)
{
WCHAR updaterINIPath[MAX_PATH + 1];
if (!GetModuleFileNameW(NULL, updaterINIPath,
sizeof(updaterINIPath) /
sizeof(updaterINIPath[0]))) {
LOG(("Could not obtain module filename when attempting to "
"modify service description. (%d)\n", GetLastError()));
return FALSE;
}
if (!PathRemoveFileSpecW(updaterINIPath)) {
LOG(("Could not remove file spec when attempting to "
"modify service description. (%d)\n", GetLastError()));
return FALSE;
}
if (!PathAppendSafe(updaterINIPath, L"updater.ini")) {
LOG(("Could not append updater.ini filename when attempting to "
"modify service description. (%d)\n", GetLastError()));
return FALSE;
}
if (GetFileAttributesW(updaterINIPath) == INVALID_FILE_ATTRIBUTES) {
LOG(("updater.ini file does not exist, will not modify "
"service description. (%d)\n", GetLastError()));
return FALSE;
}
MaintenanceServiceStringTable serviceStrings;
int rv = ReadMaintenanceServiceStrings(updaterINIPath, &serviceStrings);
if (rv != OK || !strlen(serviceStrings.serviceDescription)) {
LOG(("updater.ini file does not contain a maintenance "
"service description.\n"));
return FALSE;
}
WCHAR serviceDescription[MAX_TEXT_LEN];
if (!MultiByteToWideChar(CP_UTF8, 0,
serviceStrings.serviceDescription, -1,
serviceDescription,
sizeof(serviceDescription) /
sizeof(serviceDescription[0]))) {
LOG(("Could not convert description to wide string format (%d)\n",
GetLastError()));
return FALSE;
}
SERVICE_DESCRIPTIONW descriptionConfig;
descriptionConfig.lpDescription = serviceDescription;
if (!ChangeServiceConfig2W(serviceHandle,
SERVICE_CONFIG_DESCRIPTION,
&descriptionConfig)) {
LOG(("Could not change service config (%d)\n", GetLastError()));
return FALSE;
}
LOG(("The service description was updated successfully.\n"));
return TRUE;
}