ホーム » メモ (ページ 25)
「メモ」カテゴリーアーカイブ
MS11-025 の影響?
2011/06/16 追記
2011/06/15 に MS11-025 が更新されたので,以下は古い情報になります.
どちらかというと,以下の影響
Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ (KB2467175)
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ (KB2467174)
MS11-025
Win 7 で,AFX_IDS_~ の表示が英語になってしまう.
Open , Save As , 印刷プレビューのボタン
All Files (*.*)
Failed to create empty document.
C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\l.jpn
AppCore.cpp の _AfxLoadLangDLL と思うが,うまく確かめられない.
ここが呼ばれる前のコードを切り出して lcid は 1041 で,JPN が求まっている所までは確認.
デバッグ版では,MFC90JPN.dll がロードされている(デバッガやリソースモニターで確認).
C:\Windows\WinSxS\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.5570_none_4977a39175471b31\MFC90JPN.DLL
リリース版に,デバッグ情報を付加して動作を見ると
SXS: Invalid parameter(s) passed to FindActCtxSection*()
dwFlags = 0x00000001
ReturnedData = 0018F58C
->cbSize = 0
FindActCtxSection を検索すると,
Visual C++ MFC and ATL FindActCtxSection
そこからのリンクは Martin’s Blog 自動翻訳
_AfxLoadLangDLL のコードを比べると,
Microsoft Visual Studio 2005 Service Pack 1 (KB2465367) 適用前
static HINSTANCE _AfxLoadLangDLL(LPCTSTR pszFormat, LPCTSTR pszPath, LCID lcid)
{
…
int ret;
ATL_CRT_ERRORCHECK_SPRINTF(ret = _sntprintf_s(szLangDLL,_countof(szLangDLL),
_countof(szLangDLL)-1,pszFormat,pszPath,szLangCode));
if(ret == -1 || ret >= _countof(szLangDLL)) {
ASSERT(FALSE);
return NULL;
}
hInstance = ::LoadLibrary(szLangDLL);
return hInstance;
}
適用後
static HINSTANCE _AfxLoadLangDLL(LPCTSTR pszFormat, LPCTSTR pszPath, LCID lcid)
{
…
int ret;
ATL_CRT_ERRORCHECK_SPRINTF(ret = _sntprintf_s(szLangDLL,_countof(szLangDLL),
_countof(szLangDLL)-1,pszFormat,pszPath,szLangCode));
if(ret == -1 || ret >= _countof(szLangDLL)) {
ASSERT(FALSE);
return NULL;
}
TCHAR *pszFilename = ::PathFindFileName(szLangDLL);
ACTCTX_SECTION_KEYED_DATA data;
if (FindActCtxSectionString( FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL,
ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,pszFilename, &data) ) {
// Load using the dll name only…
hInstance = ::LoadLibraryEx(pszFilename, NULL, LOAD_LIBRARY_AS_DATAFILE);
}
else { // Load using the full path…
hInstance = ::LoadLibraryEx(szLangDLL, NULL, 0);
}
return hInstance;
}
FindActCtxSectionString によって,Win 2K では動作しなくなるらしい.
2011/05/10 追記
Ted’s Blog Fixing problems with FindActCtxSectionString in MFC security updates
static.exe での Win2K 対応と,ACTCTX_SECTION_KEYED_DATA の初期化など
比べてもあまり意味はないが,VC 2010 では
static HINSTANCE _AfxLoadLangDLL(LPCTSTR pszFormat, LPCTSTR pszPath, LCID lcid)
{
TCHAR szLangDLL[_MAX_PATH+14];
TCHAR szLangCode[4];
HINSTANCE hInstance;
if (lcid == LOCALE_SYSTEM_DEFAULT) {
Checked::tcscpy_s(szLangCode, _countof(szLangCode), _T(“LOC”));
}
else {
int nResult;
nResult = ::GetLocaleInfo(lcid, LOCALE_SABBREVLANGNAME, szLangCode, 4);
if (nResult == 0)
return NULL;
ASSERT( nResult == 4 );
}
int ret;
ATL_CRT_ERRORCHECK_SPRINTF(ret = _sntprintf_s(szLangDLL,_countof(szLangDLL),
_countof(szLangDLL)-1,pszFormat,pszPath,szLangCode));
if(ret == -1 || ret >= _countof(szLangDLL)) {
ASSERT(FALSE);
return NULL;
}
hInstance = ::LoadLibraryEx(szLangDLL, NULL, 0);
return hInstance;
}
pszPath は “C:\Windows\system32\” になっている.
ウィンドウを透明に
SetLayeredWindowAttributes
#ifndef _INC_H_HELP_USER_DLL
#define _INC_H_HELP_USER_DLL
#include <WinUser.h>
////
//*******************************************************************************
// 関数名 :SetLayeredWindowAttributes
// 作成日 :’11/01/26
//*******************************************************************************
// C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\WinUser.h より
#ifndef LWA_COLORKEY
WINUSERAPI BOOL WINAPI SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags) ;
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002
inline
BOOL Hlp_SetLayeredWindowAttributes (HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)
{
HMODULE hDll = ::LoadLibrary(_T(“User32.dll”)) ;
if (hDll == NULL) { return FALSE ; }
HRESULT (WINAPI *pfSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD) = NULL ;
(FARPROC&)pfSetLayeredWindowAttributes = ::GetProcAddress(hDll,(“SetLayeredWindowAttributes”)) ;
BOOL res = FALSE ;
if (pfSetLayeredWindowAttributes != NULL) {
res = pfSetLayeredWindowAttributes(hwnd,crKey,bAlpha,dwFlags) ;
}
::FreeLibrary(hDll) ;
return res ;
}
#define Use_Help
#endif
////
//*******************************************************************************
// 関数名 :SetLayeredWindowAttributes
// 作成日 :’11/01/26
//*******************************************************************************
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED 0x00080000
#endif
inline
BOOL SetLayeredWindowAttributes(CWnd*wnd,COLORREF key,BYTE alpha=128,DWORD flags=LWA_COLORKEY)
{
if (wnd == NULL) { return FALSE ; }
HWND hwnd = wnd->GetSafeHwnd() ;
if (hwnd == NULL) { return FALSE ; }
BOOL result = FALSE ;
LONG exStyle=::GetWindowLong(hwnd,GWL_EXSTYLE) ;
::SetWindowLong(hwnd,GWL_EXSTYLE,exStyle|WS_EX_LAYERED) ;
#ifdef Use_Help
result = ::Hlp_SetLayeredWindowAttributes(hwnd,key,alpha,flags) ;
#else
result = ::SetLayeredWindowAttributes(hwnd,key,alpha,flags) ;
#endif
return result ;
}
#endif
System Volume Information フォルダ
System Volume Information フォルダへアクセスする方法
http://support.microsoft.com/kb/309531/ja
https://www.betaarchive.com/wiki/index.php/Microsoft_KB_Archive/309531
CRichEditCtrl の使用
ダイアログでCRichEditCtrlを使用する場合,InitInstanceなど,ダイアログ表示前にAfxInitRichEdit を呼び出す必要あり(これがないとダイアログが表示されない)
http://msdn.microsoft.com/ja-jp/library/76a787xf(VS.80).aspx
BOOL CXxxxApp::InitInstance()
{
AfxEnableControlContainer();
AfxInitRichEdit() ;
…
}
VC7 以降は AfxInitRichEdit2
http://msdn.microsoft.com/ja-jp/library/tt1cfb9f(v=VS.80).aspx
WinCtrl4.cpp より
BOOL PASCAL AfxInitRichEdit()
{
_AFX_RICHEDIT_STATE* pState = _afxRichEditState;
if (pState->m_hInstRichEdit == NULL)
pState->m_hInstRichEdit = AfxCtxLoadLibraryW(L”RICHED32.DLL“);
return pState->m_hInstRichEdit != NULL;
}
BOOL PASCAL AfxInitRichEdit2()
{
_AFX_RICHEDIT_STATE* pState = _afxRichEditState;
if (pState->m_hInstRichEdit2 == NULL)
pState->m_hInstRichEdit2 = AfxCtxLoadLibraryW(L”RICHED20.DLL“);
return pState->m_hInstRichEdit2 != NULL;
}
RC 内のコントロールのクラス名 RichEdit20A , RichEdit20W
http://support.microsoft.com/kb/261171
VC6 UNICODE exe で,CRichEditCtrl から DDX で文字列を取得すると正しく取れない.
例えば”㎡㎥m” が “㎡?m” になってしまう.
RC のクラス名を “RICHEDIT” から “RichEdit20W” に変更して正しく取れる様になった.
”RichEdit20A” では,変わらず.
選択項目の変更の通知にはEN_SEL_CHANGEなど
これを使用する場合,OnInitDialogなどで,以下の様な呼び出しでの設定が必要.
long em = m_CtrlRichEdit.GetEventMask() ;
m_CtrlRichEdit.SetEventMask(em|ENM_SELCHANGE) ;
http://msdn.microsoft.com/ja-jp/library/bb774366.aspx
以下の様な方法で,FaceNameを使用可能
CHARFORMAT cf ;
::ZeroMemory(&cf,sizeof(CHARFORMAT)) ;
cf.cbSize = sizeof(CHARFORMAT) ;
m_CtrlRichEdit.GetSelectionCharFormat(cf) ;
… = cf.szFaceName ;
保存
http://msdn.microsoft.com/ja-jp/library/b0k0ywek(v=VS.80).aspx
GetGlyphOutline
Ask Dr. GUI #55
私のハートはいつもあなたに TrueType
http://msdn.microsoft.com/ja-jp/library/cc440969.aspx
Q243285: HOWTO: “Draw TrueType Glyph Outlines”
(http://support.microsoft.com/support/kb/articles/Q243/2/85.asp)
Q87115: HOWTO: “GetGlyphOutline() Native Buffer Format”
(http://support.microsoft.com/support/kb/articles/Q87/1/15.asp)
BrowseFile でファイル名を指定
Debug\EnvMove\RegExp\RegExpDg.cpp より
CString filter = _T(“登録ファイル (*.reg)|*.reg|All Files (*.*)|*.*||”) ;
BrowseFile bf ;
bf.SetFilter(filter) ;
bf.SetDialogIsSave() ;
bf.SetInitialFolder(comDoc) ;
bf.SetFileName(outFile) ;
bf.SetFileName(::FolderAddLastSP(comDoc)+::GetFileName(outFile)) ;
if (bf.Browse()) {
outFile = bf.GetSelectFile() ;
}
Envy100 を追加
無線 LAN 環境に HP ENVY 100 を追加
・暗号化なしでは接続できる.
・WEP では,MAC アドレスのフィルタリングで,はじかれている様なレポート.
MN128-SOHO-IB3 + MN-WLC54g
プリンタドライバのインストールは,ハードが接続されないとインストールが完了できないみたい.
970cxi や 2550 で,よくデバッグに使用した,ドライバでの「プレビュー」はないみたい.
検索したら,以下の情報あり
WEP 暗号化および共有キー認証を使用してワイヤレス ネットワークに接続できない
T54W7U64 CSIDL_SYSTEMX86
CSIDL_PROGRAM_FILES | C:\Program Files (x86) |
CSIDL_PROGRAM_FILESX86 | C:\Program Files (x86) |
CSIDL_SYSTEM | C:\Windows\system32 |
CSIDL_SYSTEMX86 | C:\Windows\SysWOW64 |
2020/01/23 64bit.exe で出力
CSIDL_ADMINTOOLS 30 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools CSIDL_ALTSTARTUP 1d C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup CSIDL_APPDATA 1a C:\Users\Iwao\AppData\Roaming CSIDL_BITBUCKET 0a CSIDL_CDBURN_AREA 3b C:\Users\Iwao\AppData\Local\Microsoft\Windows\Burn\Burn CSIDL_COMMON_ADMINTOOLS 2f C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools CSIDL_COMMON_ALTSTARTUP 1e C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup CSIDL_COMMON_APPDATA 23 C:\ProgramData CSIDL_COMMON_DESKTOPDIRECTORY 19 C:\Users\Public\Desktop CSIDL_COMMON_DOCUMENTS 2e C:\Users\Public\Documents CSIDL_COMMON_FAVORITES 1f C:\Users\Iwao\Favorites CSIDL_COMMON_MUSIC 35 C:\Users\Public\Music CSIDL_COMMON_OEM_LINKS 3a CSIDL_COMMON_PICTURES 36 C:\Users\Public\Pictures CSIDL_COMMON_PROGRAMS 17 C:\ProgramData\Microsoft\Windows\Start Menu\Programs CSIDL_COMMON_STARTMENU 16 C:\ProgramData\Microsoft\Windows\Start Menu CSIDL_COMMON_STARTUP 18 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup CSIDL_COMMON_TEMPLATES 2d C:\ProgramData\Microsoft\Windows\Templates CSIDL_COMMON_VIDEO 37 C:\Users\Public\Videos CSIDL_COMPUTERSNEARME 3d CSIDL_CONNECTIONS 31 CSIDL_CONTROLS 03 CSIDL_COOKIES 21 C:\Users\Iwao\AppData\Local\Microsoft\Windows\INetCookies CSIDL_DESKTOP 00 C:\Users\Iwao\Desktop CSIDL_DESKTOPDIRECTORY 10 C:\Users\Iwao\Desktop CSIDL_DRIVES 11 CSIDL_FAVORITES 06 C:\Users\Iwao\Favorites CSIDL_FONTS 14 C:\WINDOWS\Fonts CSIDL_HISTORY 22 C:\Users\Iwao\AppData\Local\Microsoft\Windows\History CSIDL_INTERNET 01 CSIDL_INTERNET_CACHE 20 C:\Users\Iwao\AppData\Local\Microsoft\Windows\INetCache CSIDL_LOCAL_APPDATA 1c C:\Users\Iwao\AppData\Local CSIDL_MYDOCUMENTS 0c CSIDL_MYMUSIC 0d C:\Users\Iwao\Music CSIDL_MYPICTURES 27 C:\Users\Iwao\Pictures CSIDL_MYVIDEO 0e C:\Users\Iwao\Videos CSIDL_NETHOOD 13 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Network Shortcuts CSIDL_NETWORK 12 CSIDL_PERSONAL 05 C:\Users\Iwao\Documents CSIDL_PRINTERS 04 CSIDL_PRINTHOOD 1b C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Printer Shortcuts CSIDL_PROFILE 28 C:\Users\Iwao CSIDL_PROGRAM_FILES 26 C:\Program Files CSIDL_PROGRAM_FILES_COMMON 2b C:\Program Files\Common Files CSIDL_PROGRAM_FILES_COMMONX86 2c C:\Program Files (x86)\Common Files CSIDL_PROGRAM_FILESX86 2a C:\Program Files (x86) CSIDL_PROGRAMS 02 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Start Menu\Programs CSIDL_RECENT 08 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Recent CSIDL_RESOURCES 38 C:\WINDOWS\resources CSIDL_RESOURCES_LOCALIZED 39 CSIDL_SENDTO 09 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\SendTo CSIDL_STARTMENU 0b C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Start Menu CSIDL_STARTUP 07 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup CSIDL_SYSTEM 25 C:\WINDOWS\system32 CSIDL_SYSTEMX86 29 C:\WINDOWS\SysWOW64 CSIDL_TEMPLATES 15 C:\Users\Iwao\AppData\Roaming\Microsoft\Windows\Templates CSIDL_WINDOWS 24 C:\WINDOWS CSIDL_xxxxxxx 0f CSIDL_xxxxxxx 32 CSIDL_xxxxxxx 33 CSIDL_xxxxxxx 34 CSIDL_xxxxxxx 3c CSIDL_xxxxxxx 3e CSIDL_xxxxxxx 3f
登録エントリ (.reg) ファイルの構文
kb 310516 登録エントリ (.reg) ファイルを使用してレジストリ サブキーおよび値を追加、変更、または削除する方法
kb 256986 上級ユーザー向けの Windows レジストリ情報
reg export key file
Win 7 で file が存在する時,”y/n” の確認が入る.XP ではない.
ShellExec クラス経由で呼び出していたので,file は更新されず原因がわかり難かったのでメモ.
{
CString command = _T(“Reg.exe”) ;
CString param ;
{
CString dateTime= CTime::GetCurrentTime().Format(_T(“%y%m%d%H%M%S”)) ;
CString tmpFile = ::FolderAddLastSP(::GetTempPath()) + _T(“M___.tmp\\Reg\\”) + dateTime + _T(“.reg”) ;
::CreateEmptyFile(tmpFile) ;
CFile::Remove(tmpFile) ;
param = _T(“export hkcu\\”) + subKey + _T(” “) + tmpFile ;
}
{
ShellExec se ;
se.SetFile(command) ;
se.SetNon2QMark(TRUE) ;
se.SetParamaters(param) ;
se.SetShowCmd(SW_HIDE) ;
se.Execute() ;
}
}
//*******************************************************************************
// 関数名 :文字列に変換
// 作成日 :’10/03/05
//*******************************************************************************
CString RegAccessF::ToString (HKEY hKey,LPCTSTR subKey,LPCTSTR entry)
{
HSecKey = GetSecKey(hKey,subKey,KEY_QUERY_VALUE) ;
if (HSecKey == NULL) { return _T(“”) ; }
Entry = entry ;
Type = REG_NONE ;
Count = 0 ;
wchar_t wcEntry[1024] ;
::ToStringWC(wcEntry,countof(wcEntry),Entry) ;
LONG checkStatus = ::RegQueryValueExW(HSecKey,wcEntry,0,&Type,NULL,&Count) ;
if (checkStatus != ERROR_SUCCESS) { return _T(“”) ; }
CByteArray dataAry ; dataAry.SetSize(Count+10) ;
BYTE* dataPtr = dataAry.GetData() ;
LONG get__Status = ::RegQueryValueExW(HSecKey,wcEntry,0,&Type,dataPtr,&Count) ;
if (checkStatus != ERROR_SUCCESS) { return _T(“”) ; }
CString str ;
str.Format(_T(“\”%s\”=hex(%x):”),entry,Type) ;
for (int index=0 ; index BYTE b1 = dataAry[index] ;
CString bStr ; bStr.Format(_T(“%02x,”),b1) ;
str += bStr ;
}
CloseSecKey() ;
return str ;
}
VC 10 Dialog を VC 6 に
VC 10 で作成したダイアログベースのプロジェクトを VC 6 に
- プロジェクト作成時の基本クラス CDialogEx → CDialog
- 「構成プロパティ」-「全般」の「出力ディレクトリ」と「中間ディレクトリ」を $(Configuration).100\ に
- RC ファイルなどが UNICODE だったため,Shift-JIS に
- RC ファイル内でエラーになる部分をコメントに
- ico ファイル内に2573x1293x16777216 (256x256x32 png) があり,ビルドエラーになったので削除
C:\…\Project.rc (67): error RC2176 : old DIB in res\Project.ico; pass it through SDKPAINT - StdAfx.h 内の AfxControlBar.h をコメントに
- CAboutDlg : CDialogEx となっているので,CDialog に
- CShellManager 関係をコメントに
- ON_COMMAND(ID_HELP, &CWinApp::OnHelp) をコメントに
ここまででビルド,実行はできたが,なんか変
VC 10 でのダイアログエディタの操作は可能だが,VC 6 では出来ない.
VC 10 で編集したものを,VC 6 でビルド,実行は可能?
ON_BN_CLICKED(IDC_XXX, &CBrwFileDlg::OnClickedXxx) の ‘&’ が邪魔.
* ここの情報は,動作などを保証するものではありません.個人的なメモです.
VC 6 RC ファイル内の DISCARDABLE
GetLongPathName 存在しないと失敗
http://msdn.microsoft.com/ja-jp/library/cc429335.aspx
簡略化するために HelpAPI.hxx に以下を用意.
inline CString GetLongPathName (LPCTSTR fileName)
{
CString longPath ;
UINT size = _MAX_PATH ;
DWORD len = ::GetLongPathName(fileName,longPath.GetBuffer(size),size) ;
longPath.ReleaseBuffer() ;
if (len == 0) { return fileName ; }
return longPath ;
}
ファイルが存在しないと関数が失敗する様なので,
::CreateEmptyFile(sFile) ;
CString lFile = ::GetLongPathName(sFile) ;
画像付ファイル名のリストボックス
ヘッダファイルへの追加
#include “DImgS.hxx” または “DImg.hxx”
#include “ODrawDcM.hxx”
ListBoxDocMF m_ListDImage;
CArray <DImageS,DImageS> DImgAry ; または <DImage,…>
OnInitDialog など
m_ListDImage.SubclassDlgItem(IDC_XXXX_FILE_LIST,this) ;
m_ListDImage.Init() ;
m_ListDImage.ResetContent() ;
リストに表示するファイルの設定
DImgAry.RemoveAll() ;
for (int dIndex=0 ; dIndex<addFiles.GetSize() ; dIndex++) {
DImageS dImg ; または DImage
dImg.SetFileName(addFiles[dIndex]) ;
DImgAry.Add(dImg) ;
}
m_ListDImage.ResetContent() ;
for (int rIndex=0 ; rIndex<DImgAry.GetSize() ; rIndex++) {
CString fileName = DImgAry.GetAt(rIndex).GetFileName() ;
m_ListDImage.AddString(fileName,fileName) ;
// 以下は登録時に画像を付ける場合
CString mfName = CacheFile::GetCF_Name(fileName,1000) ;
if (::FileIsExist(mfName)) {
m_ListDImage.SetAtDocMF(rIndex,mfName) ;
}
else {
HICON icon = DImageS_GetIcon(fileName) ;
m_ListDImage.SetAtIcon(rIndex,icon) ;
}
}
DImageS クラスでなく DImage クラスを使用した場合は,ImageDMF クラスをサポートする形になる.
DImageS クラスでは,対応付けた EMF での動作になる.
現状の ListBoxDocMF では Shell Extension を利用できないみたい.
別のクラスを用意するか変更が必要.間にListBoxDocSE などを用意するか?
FaceA::Search の高速化
データが増えると遅かったので改良
BOOL FaceA::Search(const long edgeS,const long edgeE,long* left_Face,long* rightFace) const
{
if (left_Face == NULL) { return FALSE ; }
if (rightFace== NULL) { return FALSE ; }
*left_Face = *rightFace = -1 ;
BOOL lfFound = FALSE ;
BOOL rfFound = FALSE ;
static long LastFace = 0 ;
int index = 0 ;
for (index=LastFace ; index<GetCount() ; index++) {
Face f = Faces[index] ;
if (!f.Search(edgeS,edgeE,&lfFound,&rfFound)) { continue ; }
if (*left_Face<0 && lfFound) { *left_Face = index ; }
if (*rightFace<0 && rfFound) { *rightFace = index ; }
if (*left_Face >= 0 && *rightFace>=0) {
LastFace = min(*left_Face,*rightFace) ;
return TRUE ;
}
}
for (index=0 ; index<GetCount() ; index++) {
Face f = Faces[index] ;
if (!f.Search(edgeS,edgeE,&lfFound,&rfFound)) { continue ; }
if (*left_Face<0 && lfFound) { *left_Face = index ; }
if (*rightFace<0 && rfFound) { *rightFace = index ; }
if (*left_Face >= 0 && *rightFace>=0) {
LastFace = min(*left_Face,*rightFace) ;
return TRUE ;
}
}
return FALSE ;
}
前に検索して一致した所から再検索するコードを追加.