カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

2019-01-01から1年間の記事一覧

Rで二項分布とパーセント点の垂線を描画する

R

として、二項分布の曲線と95%点の垂線を描画します。 x <- dbinom(0:1000, 1000, 0.5) plot(x, type="l", xlim=c(400, 600), yaxs="i", xlab="X", ylab="Prob.") x1 <- qbinom(1-0.05, 1000, 0.5) #1-0.05 = 0.95 = 95% segments(x1, 0, x1, x[x1])

C#でWin32 API TaskDialog関数を呼び出すサンプルコード

C#でTaskDialogを表示するにはWin32 APIのTaskDialog関数(comctl32.dll)を呼び出すサンプルコードです。適当なC#のWindows フォーム アプリケーション (.NET Framework) プロジェクトのForm1にボタン(Button1)を作成して、Clickイベントの名前を合わせて…

「Windowsの標準コントロール」と「C#の標準コントロール」

本文 前回の記事で平然と(Windows 10の)「標準コントロール」「コモンコントロール」と「C#の標準コントロール」という言葉を使ってしまったのですが、冷静に振り返ればこれらの言葉遣いは正しかったのかなと。多分に想像ですが、以下がその回答に近いかな…

C#でIEnumStringインターフェイスを実装する

C#でIEnumStringインターフェイスを実装するには、System.Runtime.InteropServices.COMTypes名前空間で定義されたC#のIEnumStringインターフェイスが利用できます。このインターフェイスを継承したクラスを実装することでCOMのIEnumStringインターフェイスを…

IShellItem.BindToHandler関数のBHID_StorageEnumとBHID_EnumItemsの違い

IShellItem.BindToHandler関数の引数にBHID_StorageEnumとBHID_EnumItemsを指定した場合、以下の点が異なります。 BHID 概要 BHID_StorageEnum 作成されたIEnumShellItemsはファイルシステムオブジェクトのみ列挙する。 BHID_EnumItems 作成されたIEnumShell…

WindowsのCOM関係レジストリキーの場所

WindowsのCOM関係のレジストリキーは次の場所に存在します。 ProgID、CLSID、Interfaceキー等 基本情報 DebugObjectRPCEnabledキー ノート 参考 ProgID、CLSID、Interfaceキー等 HKEY_LOCAL_MACHINE\Software\Classes HKEY_CURRENT_USER\Software\Classes HK…

HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、HKEY_CLASSES_ROOT

本文 HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、HKEY_CLASSES_ROOTは何れもレジストリのルートキーとして扱われる定義済みキー(Predefined Keys)ですが、その内容はログインするユーザーにより異なります。HKEY_LOCAL_MACHINEはどのユーザーでログインして…

JavaScriptのevent.targetとevent.currentTargetの違い

event.targetとevent.currentTargetの値は一般的に異なります。例えば以下のサンプルコードを実行すると次の表が得られます。ボタン2と3はどちらもA要素の子要素です。 クリックした場所 event.target event.currentTarget ボタン1 ボタン1 ボタン1 ボタン2 …

Vue.jsのmethodsやcomputedにおける関数式の種類とthis

Vue.jsのcomputedでアロー関数*1を使ってthisで混乱したので覚え書きとして。結論は以下の通りです。 Vue.jsのmethodsやcomputedでは匿名関数*2を使った方が素直 アロー関数におけるthisの挙動は仕様 thisの仕様については詳細に調べていませんが、サンプル…

C#用IShellFolderのファイル名(表示名)変更に必要な関数のラッパーを提供するクラスと拡張メソッドファイル

概要とコード サンプルコード 概要とコード 動作確認環境:Windows 10 64ビット、Microsoft Visual Studio 2019、C# 7.3 Win32 API IShellFolderインターフェイスのファイル名(表示名)変更に必要な関数のラッパーを提供するクラスと拡張メソッドファイルの…

Win32 API CIDA構造体のラッパークラス

特殊ファイル・フォルダのドロップ受け入れで使用することを目的としたWin32 API CIDA構造体のラッパークラスです。unsafeの使用を避けるためにGCHandleを使用しており、プロジェクトの設定変更が不用な代わりにGCHandleによるコストが発生します。 動作確認…

C# Win32 API STRRET構造体のラッパー構造体

C#でWin32 APIのSTRRET構造体を扱うためのラッパー構造体です。継承や内部データの操作は考慮しておらず、string型(文字列)への変換とメモリ解放処理のみ提供しています。 動作確認環境:Windows 10 64ビット、Microsoft Visual Studio 2019、C# 7.3

C#であるAndroid端末のファイルのドロップ処理を実装する場合の注意

動作確認環境:Windows 10 64ビット、Microsoft Visual Studio 2019、C# 7.3 本文 FileDropフォーマットが存在しないことに対する対処 DragOverイベントハンドラにおけるData.Effect設定の注意 参考 本文 あるAndroid機種はメーカーの公開するドライバをイン…

Google Chrome 76ではクライアントサイドJavaScriptで外部ドメインのHTMLを取得できない

Google Chrome 76のJavaScriptでは以下のどちらの方法でも外部ドメインのHTMLを取得できませんでした。IEや過去のブラウザでは可能な場合もあるそうです。 XMLHttpRequest IFRAME要素のsrc属性に設定してcontentWindow.document 取得先のサーバーを設定でき…

let宣言(JavaScript 1.8.5)はグローバルスコープを作らない

概要 let宣言(ECMAScript 2015、JavaScript 1.8.5)は変数にブロックスコープを与える。グローバルスコープは与えない。 関数の外でletを使ってもグローバル変数は定義されない。 詳細 let宣言はブロックスコープの変数を宣言することで有名ですが、同時に…

var宣言(JavaScript 1.8.5)のスコープ

概要 var宣言(JavaScript 1.8.5、ECMAScript 2015)のスコープは実行コンテキスト(execution context)(MSDN Web Docs、2019/8/2)。 実行コンテキストは関数の内部であればその関数の内部、関数の外であればグローバル。 単にグローバルスコープでも関数…

SlideShareの各カテゴリ日本語全期間ページリンク集

カテゴリ等 URL Most Popular https://www.slideshare.net/popular/language/ja/all-time Art & Photos https://www.slideshare.net/popular/language/ja/category/art-photos/all-time Automotive https://www.slideshare.net/popular/language/ja/category…

SlideShareで日本語のスライドを探すときの注意点

概要 SlideShareで日本語のスライドを探すには適当なカテゴリ等のmore filtersでJapanese、AllTimeを設定する。 AllTimeを設定しないとTodayが既定値となるため、日本語スライドはほぼ表示されない。 本文 SlideShareで日本語のスライドを探そうとして、検索…

XPathとCSS Selectorの各ブラウザ対応

概要 現時点の主要ブラウザはXPath 2.0以降非対応 CSS SelectorはLevel 3まで対応 本文 Windows版のGoogle Chrome 75でXPath 3.1を試してみようと色々とコードを書いてみたのですが、upper-case関数を何度試してもエラーになりました。どうやら現時点でXPath…

C# AngleSharp 0.12.1でHTML要素を追加する

C#

C#のAngleSharpでは、素直にノードのInnerHtmlプロパティへ直接代入(=)または追加(+=)することで要素に子要素を追加できます。例えば、適当なHTMLドキュメントを作成してそのBODY要素にHTML要素を追加するには以下のようにします。 // AngleSharpのusing…

Microsoft Visual Studio 2019 Community付属のSpy++

Microsoft Visual Studio 2019 Communityに付属している便利なソフトウェアSpy++の概要等。 Spy++の概要 ウィンドウをツリーやファインダーで検索して各種情報(親子関係、ハンドル、ウィンドウタイトル、クラス名、その他諸々)を確認できる便利なソフトウ…

VBA7用の64ビット環境対応Win32API Declareステートメント一覧

VBA

VBA7で使用できる64ビット環境対応のWin32API Declareステートメント一覧が以下からダウンロード可能です。 www.microsoft.com 配布形式はインストーラーで、展開後にフォルダ内の「Win32API_PtrSafe.TXT」を開くことで大量のコードが利用可能です。自分の環…

VBAにおける64ビット対応

VBA

概要 ExcelやWord等のMicrosoft Officeで使用されるVBAの64ビット対応の概要。詳細は以下の公式ドキュメントをご覧ください。 docs.microsoft.com 内容 VBAの64ビット対応はVBA7から導入されており、3つの重要な追加機能、条件付きコンパイル定数、型変換関…

C++&ATLでフォルダのファイル名に使えない文字を取得する

概要 Windows 10でC++&ATLでフォルダのファイル名に使えない文字を取得するには次の手順を踏みます。具体的なサンプルコード等は後に示します。 COMを初期化する。 デスクトップのIShellFolderインターフェイスを取得する。 ファイル名に使えない文字を取得…

C++&ATLでフォルダのファイル名の最大長を取得する

概要 Windows 10でC++&ATLでフォルダのファイル名の最大長を取得するには次の手順を踏みます。具体的なサンプルコード等は後に示します。 COMを初期化する。 デスクトップのIShellFolderインターフェイスを取得する。 ファイル名の最大長を取得したいフォル…

C#のUnsafeクラス

C#

MicrosoftはNuGetを通してUnsafeクラスを公開しています。これを利用することで/unsafeオプションを使用せずに変数をポインタとして扱うことができるようになります。バイト配列を構造体として参照するあるいはその逆も可能なため、素直にバイト配列として取…

VBAのPtrSafe/LongPtr

VBAにも64ビット対応の波が押し寄せていたらしく、DeclareステートメントにPtrSafe属性、データ型にLongPtr型が追加されていました。PtrSafeの無いDeclareステートメントの呼び出しは64ビット環境ではエラーとなり、LongPtr型はC/C++のポインタ(void*等)同…

ATLのCAtlArray<CComPtr<...>>の動作確認

ATLのCAtlArray<CComPtr<...>>クラスの動作確認用サンプルコードです。CAtlArrayクラスは自身のデストラクタで要素のデストラクタを呼び出すかどうかを確認するために作成しました。結論として、CAtlArray<CComPtr<...>>クラスは自力で個々の要素を解放することなくデストラクタを呼び</ccomptr<...></ccomptr<...>…

IUnknownの実装例とATL CComPtr&CComQIPtrの動作確認

IUnknownを自前で実装する方法とATLメモリ管理クラスであるCComPtrクラスおよびCComQIPtrクラスの動作確認を兼ねたサンプルコードです。 main関数内部のコメントは主にOutputDebugStringで出力される内容です。 IUnknownインターフェイスではなくIClassFacto…

VC2019のWinMain関数(wWinMain関数、_tWinMain関数)

VC2019のWinMain関数(wWinMain関数、_tWinMain関数)はプログラムの起動時に最初に呼び出される関数ではありません。実際にはCRTの用意したWinMainCRTStartup関数が呼び出され、コンストラクタ/デストラクタの呼び出し、標準関数やデバッグ情報の初期化/…