ホーム » Windows (ページ 11)
「Windows」カテゴリーアーカイブ
exe がすぐに終了しない… の続き
先日の「exe がすぐに終了しない?」の続き.
いろいろ考えたが,まだ特定できていない.
VirtualBox に同じような環境を作成.
幾つかの exe で試すが再現しない.
i3DV.2019.05.09.zip
実行には VC 2010 のランタイム が必要です.
VNC Viewer の F8
先日 Win10 を追加してから,VNC Viewer で操作している.
今まではキーボードでの操作が少なかったので気づかなかったが,
MIFES を使用していて「F8」を入力すると VNC Viewer のメニューが開いてしまう.
検索すると何らかの方法はありそう.
Linux 用の vncviewer で、メニュー表示用のキーを変更する
VNC Viewer のメニュー順にみていくと「File」-「Preferences…」.
開いたダイアログで「Expert」を選択.
Parameter の「MenuKey」が「F8」になっている.
これを他のキーに変更して対応.
もう一つ困っているのが,「かな入力」で
「ろ」の入力時「Shift」を押す必要がある.
「を」が入らない.
対応方法がわからないので,サーバの PC に接続したキーボードで対応している.
他にも,マウスの「戻る」ボタンが効かない.
exe がすぐに終了しない?
今回作成した Win10 環境で,作成した exe がすぐに終了しない現象が発生.
OS は Win10 Ent x64 1903 .
exe は,VC 7 ~ VC 10 で作成したもの.
CWinThread::Run() からすぐに抜けてこない.
実際は,その中の ExitInstance() が呼ばれるまでにしばらく時間がかかる.
ビルドしたタイミングは関係なさそう?
2002/06/20 の VC 7 で作成した ImgL0205.exe で発生する.
2009/09/15 VC 8 Win32 ImgL0909.exe も発生するが,同じ時にビルドした x64 版では問題なく終了する.
似たような機能で問題ない exe も存在する.SDI だと大丈夫なのか?
デバッガで追いかけると,終了操作の後すぐに ExitInstance が呼ばれることもある.
現象が絞れていないのでとりあえずメモ.
WinFile.exe v10.0.1901.1
2018/04 に Win10 などで動作可能なファイルマネージャーが復活したのは知っていた.
が,使い勝手があまり良くなかった.
今回 Win10 で環境を整えていて,調べると新しくなっている.
ダウンロードして動かすとまだ不満はあるが良くなった.
ダウンロード先は,
https://github.com/Microsoft/winfile/releases
次のメッセージが表示されるときは,VC のランタイムが必要です.
—————————
Winfile.exe – システム エラー
—————————
MSVCP140.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。
—————————
OK
—————————
—————————
Winfile.exe – システム エラー
—————————
VCRUNTIME140.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。
—————————
OK
—————————
mfc140u.dll が見つからない …
次の所からダウンロードしてインストールしてください.
Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3
Win10 に入っている MFC*.dll
MFC の DLL に関して調べていて,
Win10 では幾つかの MFC DLL がインストールされているという記述を見つけたので調べてみました.
VirtualBox で仮想環境を作成して,Win10 Pro 1903 をインストール.
インストールされているものは仮想マシン用のツール.
このような環境で C ドライブを mfc*.dll で検索すると,見つかるのは前から存在するもの.
mfc40.dll mfc40u.dll mfc42.dll mfc42u.dll
Win10 のバージョンによるのかどうかわかりませんが,
OS のみのインストール状態では mfc140u.dll は入っていないようです.
私の方で MFC dll をダウンロードするページへのリンクをまとめています.
https://i-tools.mish.work/2017/05/mfc140udll.html
https://jml.mish.work/index.php/cpp/ref-vcredist-xxx-exe.html
2019/06/15
msvc???.dll などは入っていたのでその画面コピーです.
2022/10/06
Win11 に入っている MFC*.DLL
VirtualBox Win7 VHD で 0x0000007B
以前 Win7 の Virtual PC で使用していた Win7 の VHD .
VirtualBox の仮想マシンを新規に作成して,Win7.vhd を指定して起動するとブルースクリーンに.
STOP: 0x0000007B (0x80D8BA58,0xC0000034,0x00000000,0x00000000)
タイミングとしては起動直後のドライバを読み込み中?
再起動すると「エラーの回復処理」の画面になるが,どちらを選んでもうまく起動できない.
「VirtualBox Win7 0x0000007B」で検索すると
Virtualbox windows raw disk guest: blue screen error 0x0000007B at boot
第11回 Windows 7のVHDブートを試す (3/3)
実機 PC の仮想化 (2/4) [VirtualBox]
これらに書かれているレジストリを変更してうまくいった.
2022/10/05
VHD 内のレジストリにアクセスするための手順.
VHD を別の仮想マシンに追加.
仮想マシンを起動して,レジストリエディタを起動.
\HKEY_LOCAl_MACHINE\ を選択して「ハイブの読み込み…」.
VHD 内の F:\Windows\System32\config\system
を読込み.
検索した所 にある様に aliide,amdide などの Start を 0 に.
Go to regedit and go to HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Find the following folders: aliide, amdide, atapi, cmdide, iastor (may not exists), iastorV, intelide, LSI_SAS, msahci, pciide and viaide
Set all their “start” value to 0 in order to enable all theses drivers at boot
存在したのは次のもの.
aliide, amdide, atapi, cmdide, iastorV, intelide, LSI_SAS, msahci, pciide, viaide
すべて修正したら「ハイブのアンロード…」.
うまく起動した.
VirtualBox と WSL
Windows Subsystem for Linux を使おうと,機能の有効化を設定してみた.
すると,はっきりはわかっていないが,VirtualBox が不安定になった気がする.
今試すと起動するが,先日は VirtualBox の仮想マシンが起動しないこともあった.
WSL を無効化して様子見.
VirtualBox に Win10
今ある Win10 環境をバックアップの目的で VHD に.
Disk2vhd.exe で VHD に.
VirtualBox で,仮想マシンを追加して起動しようとすると,
Press ESC in 1 seconds to skip startup.nsh any other key to continue.
今度は次の様に他の情報も含めて VHD に.
新しい VHD でもう一度起動しようとすると,
FATAL: No bootable medium found! System Halted.
VirtualBox の設定で,「EFI を有効化」してうまく起動した.
Win 10 設定
新しく Win10 環境が手に入ったので,その設定のメモ.
エクスプローラの設定
「エクスプローラ」の「ファイル」-「オプション」.
「開いているフォルダーまで展開」にチェック.
「タイトルバーに完全なパスを表示する」にチェック.
「ログオン時に以前のフォルダーウィンドウを表示する」にチェック.
「登録されている拡張子は表示しない」のチェックを外す.
バージョンの表示
HKEY_CURRENT_USER\Control Panel\Desktop
PaintDesktopVersion
ファイルマネージャは次の所から.
https://github.com/Microsoft/winfile/releases
以前のバージョンより良くなっている.
電源メニューに「休止状態」の表示
https://dynabook.com/assistpc/faq/pcdata2/016713.htm
C1189 : WINDOWS.H already …
幾つかの,MFC を使用していないプロジェクトをビルドしていると,
--------------------構成: GAtoSTL - Win32 Release--------------------
コンパイル中...
GAtoSTL.cpp
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
cl.exe の実行エラー
GAtoSTL.obj - エラー 1、警告 0
MFC アプリでは windows.h をインクルードしてはいけないというエラー.
最近(2019/03)変更したコードで,意図せず Afx.h などを利用するようになってしまった所があると思われる.
今回の場合,デバッグ版や Linux 環境,VC 14 などでは通っている.
次の様な内容を include している部分に挿入して確認すると,
#pragma message (“message 1”)
Zip.hxx がうまくない.
#ifndef I_SUPPORT_ZIP // ここは個人的なコードです #ifdef _DEBUG #include "i_Zip.hxx" // STL と Windows.h #else #include "a_Zip.hxx" // AfxDisp などを使用 #endif #endif
a_Zip.hxx は zip を扱う古い形式(MFC を使用している)のもの.
i_Zip.hxx は MFC を使用しないように変更したもの.
a_Zip.hxx を使用しないように変更.
2019/08/26 追加
このエラーが表示される原因は,
MFC 関連の afx*.h がインクルードされる前に Windows.h が読み込まれているため.
MFC を使用しているプロジェクトで StdAfx.h を使用してない場合は,
ソース内のヘッダのインクルードで最初に #include <afxwin.h> などとすれば良い.
2020/02/14
それから,作成したヘッダファイル内では Afx*.h のインクルードはしない方が良さそう.
https://dev.mish.work/wordpress/2020/02/08/lnk2005-operator-delete/
次のエラーの場合はこちら.
error C1189: #error: Please use the /MD switch for _AFXDLL builds
fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
2020/10
コンソール AP で Windows.h を使用する時の hxx を用意した.
コンソール AP での define
_AFXDLL で判断しているため 「MFC のスタティックライブラリを使用」には対応できない .
T5400 また青くなってしまった…
ActiveX.exe , ActiveX.dll の登録
何年かに 1 度ある問合せ.普段あまりやってないとすぐ忘れてしまう.
dll や ocx の登録は,RegSvr32 .
管理者として起動したコマンドプロンプトで,以下の様に入力して登録できる.
RegSvr32.exe ActiveX.dll
RegSvr32 で ocx などの登録
OCX x64
exe は,管理者として起動したコマンドプロンプトで実行.
ActiveX.exe
IIS 環境の再設定
Funmoods の削除
Chrome の「拡張機能」の所を見ていたら,見慣れない「Funmoods」というのがあった.
特に変な現象は気がつかなかったが,ウィルスに近い存在らしいので以下を参考にさせてもらって削除することに.
Funmoods Toolbar削除アンインストール方法&Funmoods Search無効化方法
2019/01/24 上のリンク先は変更されています.
Funmoods Toolbar削除アンインストール方法&Funmoods Search無効化方法
PolyPolygon
あまり利用していないが,PolyPolygon を使ったコード.
CArray<P2A,P2A> p2aAry ; p2aAry.Copy(P2A_Ary) ; ::P2AA_InvY(&p2aAry) ; CRect rect ; m_Image.GetClientRect(rect) ; ::P2AA_Scale(&p2aAry,rect) ; // ... CArray<CPoint,CPoint> points ; CUIntArray polyCounts ; int nCount = ::P2AA_ToPointAry(p2aAry,&points,&polyCounts) ; CClientDC dc(&m_Image) ; dc.PolyPolygon (points.GetData(), (int*)polyCounts.GetData(),nCount) ; // ...
P2A は 2 次元座標の配列で,一つの多角形を保持.
CArray<P2A,P2A> とすることにより,複数の多角形を持っている.
前半部分で表示用の座標に変換している.
次の様なデータの場合,2 次元座標の配列 points と,polyCounts が 9 と 8 ,nCount が 2 .
L -1.390625, 6.5, 0,1, 1.390625, 6.5, 0,1, 5.640625, -6.5, 0,1, 3.734375, -6.5, 0,1, 2.21875, -2.5, 0,1, -2.21875, -2.5, 0,1, -3.75, -6.5, 0,1, -5.640625, -6.5, 0,1, -1.390625, 6.5, 0,1, L 1.59375, -0.5, 0,1, 0.734375, 2.203125, 0,1, 0.28515625, 3.60546875, 0,1, 0, 4.5, 0,1, -0.2421875, 3.72265625, 0,1, -0.59375, 2.640625, 0,1, -1.59375, -0.5, 0,1, 1.59375, -0.5, 0,1,
![]()
1つの多角形は閉じた状態で指定している.
ドキュメントには,次の様に書かれている.
「各多角形の最初の頂点と最後の頂点は、自動的に結ばれます。各頂点を 1 回だけ指定するべきです。」
球が作成できない
背景画像のアップロードで,球を生成してそれに貼り付ける.
コード自体はそれほど難しくないので,1 日位でできると思ってた.
Windows のコンソール AP で,次の様なコードを書いてテスト.
MakeBG.cpp
make_bg.hxx
#include "MessBar.hxx" #include "i_Trace.hxx" #include "gonsprm2.hxx" #include "Htm_thrj.hxx" //******************************************************************************* // make bg files imo and html // Create : 2018/04/19 //******************************************************************************* inline bool MakeBG (c_tstring& dibPath) { tstring ext = ::Path_GetExtLow(dibPath) ; if (ext == _T("bmp")) { ; } else if (ext == _T("jpg")) { ; } else if (ext == _T("png")) { ; } else { return false ; } { tstring imoPath = ::Path_ChangeExt(dibPath,_T(".imo")) ; tstring htmName = ::Path_ChangeExt(dibPath,_T(".html")) ; tstring dmpName = ::Path_ChangeExt(dibPath,_T(".ipl")) ; { long div = 90/5 ; v_Vd3A pntsAry = ::BuildSphere(div) ; { std::tout << pntsAry.size() << std::endl ; if (pntsAry.size() > 0) { Vd3A pnts = pntsAry[0] ; std::tout << pnts.size() << std::endl ; } tstring str = ::v_V3_To_tstring(pntsAry,_T(",")) ; { std::tout << str << std::endl ; } ::SaveText(dmpName.c_str(),str) ; } v_Vd2A txuvAry = ::SetTextureUV(pntsAry) ; pntsAry = ::V3_Scale (pntsAry,Vd3(20.)) ; Gons1 gons1 = ::Gons_BuildFace(pntsAry,txuvAry,dibPath.c_str()) ; GonsA ga ; ga.push_back(gons1) ; Ed3 es = ::GonsA_GetExtent(ga) ; { std::tout << imoPath << _T("\t") ; std::tout << ::V3_To_tstring(es.Volume()) << std::endl ; } if (es.Volume() != Vd3(0)) { es = Ed3(es.L*0.01,es.G*0.01) ; ::GonsA_ToOBJ(ga,imoPath.c_str()) ; ::HT_Make_three_js_html(imoPath.c_str(),es) ; } } } return true ; } //******************************************************************************* // Make BG // Create : 2018/04/19 //******************************************************************************* int _tmain (int argc,TCHAR* argv[]) { _tsetlocale(LC_ALL,_T("")) ; { double s = sin(rad(30)) ; double c = cos(rad(30)) ; std::tout << ::To_tstring(rad(30)) << _T("\t") << ::To_tstring(s) << _T("\t") << ::To_tstring(c) << std::endl ; } if (argc > 1) { v_tstring argAry ; for (int index=1 ; index<argc ; index++) { tstring av = argv[index] ; ::MakeBG(av) ; } } else { tstring buf ; buf.resize(1000) ; { while (std::terr << _T("dib ? =") , std::tin.getline(&buf[0],buf.size())) { tstring str = buf.c_str() ; if (str == _T("q")) { break ; } else if (str == _T("Q")) { break ; } str = ::QuotM_Del_All(str) ; if (str.empty()) { continue ; } if (::File_IsNothing(str)) { continue ; } tstring dib_file = str ; ::MakeBG(dib_file) ; } } } return 0 ; } #include "MessBar.cxx"
今度は,DS116 でビルドして実行すると,
Iwao@DS116:/var/.../Test/up_bg/data$ ./a.out 0.523599 98314745853377985068733249901357667205561433229409406145971019710277043155206326909160297391588106447153156445277590513896008090831662627743743127151181611161993303763348552511914898438567008016612049817143085994563143448055356356529593034366351316506187159487365573007925410016860727208738652774465536.000000 98321247861193438769252981549279948821735544950351014769381393881588573259178110828643912278175146924986161470094082713103803921735703931192359519739047155548857037547932930737608178537416409042994283830606984599100883034181136178714087912736395732787698542049681305006129736011480288874859116047106048.000000 dib ? =
本当は,
C:\Users\Iwao\...\i_Tools.tmp>\\DevXP\C_Drive\Temp\DS11x\MakeBG\Release.060\MakeBG.exe 0.523599 0.500000 0.866025 dib ? =
cmath が使えない様で,検索すると「-lm でコンパイルが通る」と言うのは見つかる.
が,コンパイルの問題ではなく,実行でうまくない.
当然ではあるが,DS115j でも同様.
試しに,opkg update と opkg install gcc .
root@DS116:/var/…/Iwao# opkg update
Downloading http://pkg.entware.net/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
root@DS116:/var/…/Iwao# opkg install gcc
Upgrading gcc on root from 6.3.0-1 to 6.3.0-1a…
Downloading http://pkg.entware.net/binaries/armv7/gcc_6.3.0-1a_armv7soft.ipk
Configuring gcc.
root@DS116:/var/…/Iwao#
もう一度,ビルドして実行すると,
Iwao@DS116:/var/…/Test/up_bg/data$ g++ MakeBG.cpp
Iwao@DS116:/var/…/Test/up_bg/data$ ./a.out
0.523599 0.500000 0.866025
dib ? =
予想以上に時間がかかってしまったが,何とか…
daikoku_edit.html
2019/02/13 リンクなどを修正
アップロード先のアクセス権
次の様な htm と php で,画像をアップできる所を用意.
up.htm
<!DOCTYPE html> <html lang="ja" > <head > <meta charset="UTF-8" /> </head> <body > <form action="http:./up.php" method="post" enctype="multipart/form-data"> <input type="file" name ="fname" accept=".jpg,.png"> <input type="submit" value="upload"> </form> </body> </html>
up.php
<?php $tempfile = $_FILES['fname']['tmp_name']; $fileName = './data/' . $_FILES['fname']['name'] ; $up_status = false ; if (is_uploaded_file($tempfile)) { $up_status = move_uploaded_file($tempfile , $fileName ) ; } $frm_src = './' ; if ($up_status) { $frm_src = $fileName ; } header("Location: {$frm_src}") ; ?>
これらのファイルとアップ先のフォルダを用意しただけでは,アクセス権がないのでアップロードできない.
以前は,DSM に入り「File Station」で「権限」を設定していた.
今まで面倒と思いつつ,試しに Windows 環境からアクセス権を「読み取り(RX)(RX)」から「変更」に.
File Station で設定したものと少し異なるが,それなりに動作してそう.
WinFile.exe
Google ニュースで,次の内容を見つけた.
Windows 3.x時代の“ファイルマネージャ”がオープンソース化で復活~Windows 10でも利用可能に
WinXP までは,1999/10/14 8:00:00 の WinFile.exe を使用している.
Win7 でも動作させるための方法があって,試したこともあるがうまく動作しなかった.
Windows File Manager revived
次の所から落として動作を確認してみた.
WinFile v10.0 – Sharing 10 years of improvements
Winfile_orig_plus.zip の方がオリジナルに近いのでやってみたが,設定情報が保存されないみたい.
Winfile_v10.0.zip は,「Properties」などが新しくなってしまっている.
2019/05 v10.0.1901.1 で内容を更新しています.
WinFile.exe v10.0.1901.1
MAPI の MapiFileDesc の配列
MFC を使用している方法では,
LateDelete ld ; // MultiByte の必要があるようなので,UNICODE の時のバッファをここに登録 // 添付ファイルの準備 CArray<MapiFileDesc,MapiFileDesc> fileDescA ; int fileCount = 0 ; int index = 0 ; for (index=0 ; index<PathNames.GetSize() ; index++) { CString pathName = PathNames[index] ; if (::FileIsNothing (pathName)) { continue ; } if (::FileIsDirectory(pathName)) { continue ; } MapiFileDesc fileDesc ; memset(&fileDesc,0,sizeof(MapiFileDesc)) ; fileDesc.nPosition = (ULONG)-1 ; #ifdef _UNICODE fileDesc.lpszPathName = SendMail__ChangeMultiByte(PathNames[index],&ld) ; fileDesc.lpszFileName = SendMail__ChangeMultiByte(FileNames[index],&ld) ; #else fileDesc.lpszPathName = LPSTR(LPCTSTR(PathNames[index])) ; fileDesc.lpszFileName = LPSTR(LPCTSTR(FileNames[index])) ; #endif fileDescA.Add(fileDesc) ; fileCount++ ; }
MFC を使用しないコードは,
std::vector<MapiFileDesc> fileDescA ; std::vector<std::string> pathNameA ; std::vector<std::string> fileNameA ; int index = 0 ; { for (index=0 ; index<PathNames.GetSize() ; index++) { { tstring pathName = PathNames[index] ; if (::File_IsNothing (pathName)) { continue ; } if (::File_IsDirectory(pathName)) { continue ; } } std::string pathName= ::To__string(PathNames[index]) ; std::string fileName= ::To__string(FileNames[index]) ; pathNameA.push_back(pathName) ; fileNameA.push_back(fileName) ; } { for (size_t index=0 ; index<pathNameA.size()&&index<fileNameA.size() ; index++) { MapiFileDesc fileDesc ; memset(&fileDesc,0,sizeof(MapiFileDesc)) ; fileDesc.nPosition = (ULONG)-1 ; fileDesc.lpszPathName = &(pathNameA[index])[0] ; fileDesc.lpszFileName = &(fileNameA[index])[0] ; fileDescA.push_back(fileDesc) ; } } }
詳しくは見てないが,幾つかの方法が書かれていたので
Sending Email with MAPI
MapiRecipDesc.lpszAddress の “smtp:”
以前コードを直したのが 2002/4 であまり情報がなかった様に思う.
個人的に書いた内容が「Outlook で配信不能になる」
参考になりそうな所
Email mit Dateien perWinAPI versenden??
MAPISendMail
MSDN MapiRecipDesc structure
Sending email using MAPI causes error on ‘ResolveName’ function in Window7
MAPI を使用した複数ファイルの送信
S_Mail.hxx