ホーム » メモ (ページ 2)
「メモ」カテゴリーアーカイブ
角の二等分線
https://en.wikipedia.org/wiki/Bisection
wiki にあるアニメーションをコードにしたもの.
Ld2 V2_get_bisector (const Vd2& vp,const Vd2& vc,const Vd2& vn)
{
// * vp
// |
// |
// | * vcx
// | /
// | o /
// | / o
// vc * - - - - - - * vn
Vd2 vcp = (vp-vc).Normalized() ;
Vd2 vcn = (vn-vc).Normalized() ;
Vd2 vcb = (vcp+vcn)/2. ;
Vd2 vcx = vcb + vc ;
{
vcx = ::get_cross_line(vp,vn,vc,vcx) ;
}
Ld2 lbs(vc,vcx) ;
return lbs ;
}
青い円弧が,最初の 2 行の Normalized .
次の中点を求めているのは,赤い円弧の交点を結ぶ線にあたる.
二等分線を対辺?まで延長.
GLUT を使用した 3D データの表示
個人的なメモです.
4 年位前に作成したコードで,凹多角形がうまく処理できていないものがあったのでその変更.
#include "glut_cg.hxx"
#include "gonsa_to.hxx"
#define TIMING_DN 1000
// int _tmain (int argc, _TCHAR* argv[])
int main (int argc, char* argv[])
{
{
GonsA gnsa ;
{
tstring buf ; buf.resize(1000) ;
while (std::terr << _T("file ? =") , 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 in_file = str ;
gnsa = ::To_GonsA(in_file.c_str()) ;
gnsa = ::GonsA_Triangulation(gnsa) ; // 2023/06/27
gnsa = ::GonsA_CalcNormal (gnsa) ; // 2023/06/27
if (gnsa.size() > 0) { break ; }
}
if (gnsa.size() == 0) { return 0 ; }
}
::set_GonsA(gnsa) ;
::set_Extent(::GonsA_GetExtent(gnsa)) ;
}
::glutInitWindowPosition(200,200) ;
::glutInitWindowSize (600,400) ;
::glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) ;
::glutInit (&argc,argv) ;
::glutCreateWindow (argv[0]) ;
::glutReshapeFunc (cv_resize) ;
::glutDisplayFunc (cg_display) ;
::glutKeyboardFunc (cv_keyboard) ;
::glutMouseFunc (cv_mouse) ;
::glutMotionFunc (cv_motion) ;
::glutTimerFunc (TIMING_DN,cv_timer,TIMING_DN) ;
::cv_init () ;
{
::glEnable(GL_LIGHTING) ;
::glEnable(GL_LIGHT0) ;
}
::glutMainLoop () ;
return 0 ;
}
#include "messbar.cxx"
[MyDNS.JP] IPアドレスの通知が …
C++ NonCopyable
MFC を使用しないコードに書き直していて,代入できない構造体が欲しくなった.
オリジナルのコードは 20 年以上前のもので,CRegKey が簡単には使えなかった?頃.
「C++ クラス 代入できなくする」で検索.
コピー禁止を徹底させるNoncopyableクラス
More C++ Idioms/コピー禁止ミックスイン(Non-copyable Mixin)
明示的に既定された関数および削除された関数
MFC の CObject も同様と思いソースを見ると,やはり private になっている.
C++11 以降では =delete も使える.
関数のdefault/delete宣言
wiki C++11
これらを調べていて,次の所を見つけた.
旧時代のC言語を使うのはそろそろやめよう。
2016年、C言語はどう書くべきか (前編)
2016年、C言語はどう書くべきか (後編)
幾つかは既に意識しているが,Windows に依存する部分はなかなかできてない.
ダイアログバーのイベント処理
あまり使わないと,すぐ忘れてしまう…
1999/10 に作成したプロジェクトを変更していて,ダイアログバーにコントロールを追加.
ClassWizard で CMainFrame に対してイベント処理を追加すれば良い.
今回の SDI.exe は,ビューでの処理のみなので「再描画」のコマンドメッセージを Post している.
void CMainFrame::OnUpdateRx()
{
PostMessage(WM_COMMAND,ID_REDRAW,0) ;
}
ビューでは次の様にしてコントロールにアクセスしている.
CMainFrame* pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd ;
CDialogBar* dlgBar= &pMain->m_wndMyDialogBar ;
CComboBox* font = (CComboBox*) dlgBar->GetDlgItem(IDC_FONT_NAME) ;
CEdit* text = (CEdit*) dlgBar->GetDlgItem(IDC_STRING) ;
CEdit* e_rx = (CEdit*) dlgBar->GetDlgItem(IDC_RX) ;
CEdit* e_ry = (CEdit*) dlgBar->GetDlgItem(IDC_RY) ;
ダイアログバーの追加手順は次の所.
https://dev.mish.work/wordpress/2021/12/27/vc-6-dialog-bar/
Win11 MFC80u.dll などの場所
VC 2005 で作成した exe がうまく起動しないと連絡が入った.
すぐに dll などがないためとわかり,VC 2005 SP1 vcredist_x86.exe を入れて対応してもらった.
https://jml.mish.work/index.php/cpp/ref-vcredist-xxx-exe.html
それで,Win11 環境の c:\Windows\WinSxS\ の MFC80*.dll を見ると,それらしいものが見当たらない.
Win10 では …\WinSxS\ に存在する.
explorer で検索すると Win11 では ..\WinSxS\Fusion\ 以下になっている.
Linux VS Code インストール
Fedora 環境に VS Code のインストール.
Fedora Linux に Visual Studio Code をインストールする方法
最初の次のコマンドで,時間がかかっている.
sudo dnf upgrade –refresh
それで調べているともっと簡単と思われる情報が…
Visual Studio Code – Fedora Project Wiki
次のコマンドでインストール.
flatpak install https://flathub.org/repo/appstream/com.visualstudio.code.flatpakref
何とか入った.
が,どうやって使うのか…
Ubuntu 環境は OS が古く,20.04 への更新から.
さらに flatpak をインストールする必要があった.
sudo apt install flatpak
そして,
flatpak install https://flathub.org/repo/appstream/com.visualstudio.code.flatpakref
こちらの方は「日本語化」のインストールの案内が自動で出てきた.
Fedora 環境では,手動で追加.
「言語拡張機能の参照」をクリック.すると,左に「C#」などがリストされる.
.NET のインストール.
Linux に .NET をインストールする
dotnet と入力すると,sudo snap install dotnet-sdk と出てきた.
これは違った?
次の所にある C# のコードを作成して VS Code で「デバッグなして実行」.
コンソール アプリ
すると,また同じ所に.
Ubuntu に .NET SDK または .NET ランタイムをインストールする
順に入れたが…
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update && sudo apt-get install -y dotnet-sdk-6.0
よくわからない.
次の所を参考にコマンドで…
Linux での開発用に C# を設定する
次のコマンドを入力すると…
dotnet new console
そして,
dotnet run
何とか,コンパイル,実行できることは確認できた.
今度は Fedora 環境に.
Fedora に .NET SDK または .NET ランタイムをインストールする
sudo dnf install dotnet-sdk-6.0
dotnet new console と dotnet run
2022/11/25
Windows 環境だと…
dotnet new <テンプレート>
VS Code はエディタとして使用する程度?
チュートリアル: Visual Studio Code を使用して .NET コンソール アプリケーションを作成する
うまく動作しない.ターミナルからでは dotnet コマンドへのパスが通っていない?
「.NET なんとか」
「.NET なんとか」のメモ.
.NET Framework
.NET (.NET Core)
.NET MAUI
.NET CLI
VS などが入っている環境だと,次のコマンドで SDK バージョンを確認できる.
dotnet –list-sdks
Visual C++ で基本的なファイル I/O を実行する
C++/CLI プロジェクトを .NET Core または .NET 5 に移植する方法
C++/CLI
「プロジェクト テンプレート」で「CLR 空のプロジェクト(.NET Framework)」を選択.
次の様な内容のソースを追加.
//#include "pch.h"
using namespace System;
int main(array<System::String^>^ args)
{
Console::Write("test");
return 0;
}
次の所のコードと std::cin との混在.
ファイル処理と I/O (C++/CLI)
// file_info.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;
#include "ask_cli.hxx"
#include "str_CLI.hxx"
bool Draw_FileInfo (c_tstring& file_name)
{
String^ file = ::to_gcString(file_name) ;
FileInfo^ fi = gcnew FileInfo(file) ;
Console::WriteLine("file size: {0}", fi->Length);
Console::Write ("File creation date: ");
Console::Write ( fi->CreationTime.Month.ToString());
Console::Write (".{0}", fi->CreationTime.Day.ToString());
Console::WriteLine(".{0}", fi->CreationTime.Year.ToString());
Console::Write ("Last access date: ");
Console::Write ( fi->LastAccessTime.Month.ToString());
Console::Write (".{0}", fi->LastAccessTime.Day.ToString());
Console::WriteLine(".{0}", fi->LastAccessTime.Year.ToString());
return true ;
}
int main()
{
array<String^>^ args = Environment::GetCommandLineArgs();
if (args->Length > 1) {
tstring file_name = ::to_tstring(args[1]) ;
::Draw_FileInfo(file_name) ;
}
else {
while(true) {
tstring path = ::ask_cli(_T("file ... ? =")) ;
if (path.empty()) { break ; }
::Draw_FileInfo(path) ;
}
}
return 0;
}
fatal error C1010
昨日から VC6 で開いたままだったプロジェクトをビルドすると,あまり見慣れないエラーが…
--------------------Configuration: AsTrmM - Win32 Debug--------------------
Compiling...
HProRNew.cpp
t:\develop\_.src\...\hprornew.cpp(113) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.
AsTrmM.exe - 1 error(s), 0 warning(s)
他の環境で試そうとプロジェクトを閉じようとすると,保存するかの問合せが入った.
保存された dsp と先日バックアップしたそれと比べると,不要な cpp が追加されていた.
ソースを開いた時,操作ミスで間違ってビルド対象に cpp が追加されてしまったみたい.
不要な cpp をプロジェクトから外して対応.うまくいった.
私の場合,自動生成される以外のソースは,次の様な複数の cpp をプロジェクトに追加して運用しています.
ComUse01.cpp
#include "StdAfx.h"
#include "ComPrj00.hpp"
#include "Point.cxx"
#include "Matrix.cxx"
// ...
ComPrj00.hpp
#include "i3DV.h" // App.h
#include "ColorHSV.hxx"
// ...
Win7 ライセンス認証
Win7 のライセンス認証がうまく通らない.「エラー コード 0x80072F8F」になってしまう.
一時的なものか,それともどこかが壊れているのかと思いそのままになっていた環境.
先日,動作確認のために Win7 のクリーンな環境が必要になり,仮想マシンにインストール.
その時も同様のエラーだったので,電話で取得した.
それで,通らなかった環境の電話での手順.
「ライセンス認証の手続きを行う他の方法を表示します」を選択.
「自動電話システムを使用します」を選択.
「日本」を選択.
表示された電話番号にかけて,電話で「インストール ID」を入力.
正しく入力できると「確認 ID」が案内される.
「確認 ID」を入力して「次へ」.
How To Activate Windows 7 by Phone Step-by-Step Guide
Windows の製品ライセンス認証 – オンライン サポートの電話番号
2024/05/23
WinXP CHS をアクティベーションする必要があったので,Win7 の時と同様に実施.
電話をかけると,AI による対応になったみたい.
反応があまり良いとは言えないのでイライラするが,何とか認証できた.
コンソール AP のための最初のコード
API などをテストするために,個人的に使用している C++ のコード.
#include <clocale>
#include <iostream>
#include "_tdefine.hxx"
#include "cmd_line.hxx"
#include "ask_cli.hxx"
//#include "ask_path.hxx"
bool test (c_tstring& str)
{
std::terr << str << std::endl ;
return true ;
}
inline bool call_func (int argc,TCHAR* argv[])
{
if (argc > 1) {
for (int index=1 ; index<argc ; index++) {
tstring av = argv[index] ;
::test(av) ;
}
}
else {
while(true) {
tstring path ;
{
#ifdef OFN_filter_All
path = ::ask_path(false) ;
#else
path = ::ask_cli(_T("file ... ? =")) ;
#endif
}
if (path.empty()) { break ; }
::test(path) ;
}
}
return true ;
}
int _tmain (int argc,TCHAR* argv[])
{
_tsetlocale(LC_ALL,_T("")) ;
{
::reg_argv (argc,argv) ;
}
{
::call_func(argc,argv) ;
}
{
::test(_T("Test")) ;
}
::ask_wait() ;
return 0 ;
}
//#include "messbar.cxx"
インクルードしているファイルは cpp6_hxx.zip にある.
上のコードを test.cpp などとして保存し,同じ所に zip を展開.
g++ test.cpp などでコンパイル可能.
これらを使用したコード.
https://dev.mish.work/wordpress/?s=reg_argv
VirusTotal SmpTxt.exe
Synology NAS の Cloud Sync のログに,ダウンロードできないファイルが幾つかあった.
対象のファイルは SmpTxt.zip で,その中の SmpTxt.exe がうまくない様子.
VC 6 でビルドしたものがマルウェアなどとして検出されている.VC 8 でビルドしたものは問題ない.
Vector に登録できているので誤検出だろうと思うが,どうしたものか.
i_ShellExt 未定義ドキュメントのサムネイルを表示可能に
2022/09/22
VC のバージョンをあげて対応することに.また SmpTxt.zip 内の VC 6 版は削除予定.
2022/09/26
SmpTxt_2022_09.zip
クリップボード ビューア
以前まとめたもの.
ClipView.doc
MSDNのドキュメントは,”Creating a Clipboard Viewer Window” で見つかる.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016.aspx
mk:@MSITStore:j:\MSDN\ipc.chm::/hh/winbase/clipbrd_47ok.htm
WM_CREATE ビューアとしての登録
NextWnd = ::SetClipboardViewer(hWnd) ;
WM_DESTORY ビューアの登録解除
::ChangeClipboardChain(hWnd,NextWnd) ;
WM_CHANGECBCHAIN 他のビューアが登録解除された
if ((HWND)wParam == NextWnd) { NextWnd = (HWND)lParam ; }
else if (NextWnd != NULL) { ::SendMessage(NextWnd,uMsg,wParam,lParam) ; }
WM_DRAWCLIPBOARD クリップボードの内容が更新された
// 描画または相当の動作
if (NextWnd != NULL) { ::SendMessage(NextWnd,uMsg,wParam,lParam) ; }
VC 2022 ビルドでエラー
VC 2022 でビルドしようとすると,次の様なエラー.
—————————
Microsoft Visual Studio
—————————
オブジェクト参照がオブジェクト インスタンスに設定されていません。
—————————
OK
—————————
プロジェクトの設定などを見直しても特に怪しい部分はなさそう.
ビルド時に生成される幾つかのファイルを手動で削除しても特に変わらない.
さっきまで動作していた VC 2019 も同様のエラーに.
以前うまく動作しているはずのプロジェクトをコピーして,ビルドしようとしても同様.
こうなると,プロジェクトの設定ではなく,環境っぽい.
PC を再起動してうまく動作する様になった.
MFC OnUpdate… が来ない?
自前の Doc::UpdateCommand で CCmdUI の処理を実装して,イベントが来なかった.
原因は,範囲の指定が間違っていた.
ON_UPDATE_COMMAND_UI_RANGE (ID_Start, ID_End, OnUpdateCmd)
すぐに気づかなかったのでメモ.
ツールバーのコマンドが効かない
ある AP の動作で,ツールバーの一部のコマンドが入らない.
いろいろと確認すると,x64 exe で,リリース版,デバッグ版は関係ない.
x86 exe は問題ない(ちゃんと機能する).
2015/11 の exe でも同様の現象を確認.
メニューの同様のコマンドは問題ない.
ツールバーがちらつくので,UPDATE_COMMAND_UI の実装でうまくない部分があると思われる.
一時的に Disable にしているなど…
調べるのに時間がかかりそうなので,取りあえずメモ.
状態により,次の矛盾したものが呼ばれることがあったため修正.
pCmdUI->Enable(FALSE) ;
pCmdUI->Enable(TRUE) ;
TS-253D SSL 証明書の更新
DS220+ を追加 して,その後いろいろと設定を変更したためか,TS-253D の証明書がうまく更新されない.
「コントロールパネル」-「セキュリティ」-「SSL 証明書…」-「証明書更新」でエラーになる.
原因は,以前「代替名」で指定していた jml.mish.work などがうまくなかったものと思われる.
現在 jml.mish.work は DS220+ の方に割り当てている.
もう一度,「証明書の交換」から入って,次の様に指定することで取得できた.
同様に AS5202T の方も…
こちらの場合は一度削除する必要があった.
2022/06/13
Synology NAS DS116 は,まだ完全に移行できていないので,ポートマッピングの設定を一時的に変更して取得.
次の画像は「既存の認証を書き換えます」としたもの.
「サブジェクトの指定の別名」での区切り文字(セミコロン)が間違っているため,「完了」が押せない.