ショートカット作成の CreateLink のドキュメントの場所など
CreateLink
CSIDL
KNOWNFOLDERID
サンプルの ::CreateLink を利用したコード.
呼出している所は次の様なコード.lnk がなければ CreateLink .あれば削除.
UNICODE 版としてビルドする必要がある.
if (_taccess(lnk_path,0) != 0) { ::CoInitialize(NULL) ; char mb_lnk_path[MAX_PATH] ; ::WideCharToMultiByte(CP_ACP,0,lnk_path,-1,mb_lnk_path,MAX_PATH,NULL,NULL) ; ::CreateLink(exe_path,mb_lnk_path,descript) ; ::CoUninitialize() ; } else { _tremove(lnk_path) ; }
サンプル状態では使い勝手が良くないので,幾つか修正.
HRESULT CreateLink ( LPCTSTR lpszPathObj , // LPCWSTR LPCWSTR lpszPathLink , // LPCSTR LPCTSTR lpszDesc , // LPCWSTR LPCTSTR workingFolder , // 作業フォルダ WORD hotkey = 0 // )
_UNICODE を指定してビルドすると
--------------------構成: T_Lnk - Win32 Release-------------------- コンパイル中... T_Lnk.cpp \\DevS\Documents\Develop\_.SRC\__CPR_\xtot.hxx(83) : error C2679: 二項演算子 '=' : 型 'unsigned short [2]' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照) \\DevS\Documents\Develop\_.SRC\__CPR_\xtot.hxx(103) : error C2679: 二項演算子 '=' : 型 'unsigned short [2]' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照) \\DevS\Documents\Develop\_.SRC\__CPR_\ttox.hxx(34) : error C2664: 'wcstoul' : 1 番目の引数を 'const char *' から 'const unsigned short *' に変換できません。 (新しい機能 ; ヘルプを参照) 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 \\DevS\Documents\Develop\_.SRC\__CPR_\ttox.hxx(34) : fatal error C1903: 直前のエラーを修復できません; コンパイルを中止します。 cl.exe の実行エラー T_Lnk.exe - エラー 4、警告 0
UNICODE などの定義が矛盾していることがあるのでそれを最初に指定する.
// (VS8)\VC\AtlMFC\Include\AfxV_W32.h
#ifdef _MSC_VER #ifdef _UNICODE #ifndef UNICODE #define UNICODE // UNICODE is used by Windows headers #endif #endif #ifdef UNICODE #ifndef _UNICODE #define _UNICODE // _UNICODE is used by C-runtime/MFC headers #endif #endif #endif
https://dev.mish.work/wordpress/2020/09/25/i_def_aw-hxx/
2020/10/14
作成した CreateLink の引数.
IID_IPersistFile の Save は LPCOLESTR になっている.
IID_IShellLink は _UNICODE かどうかでそれぞれが使用される.