ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

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

DLLがあるのに見つからない

DLLを利用するEXEを実行したところ、プログラムと同じフォルダにDLLがあるにも関わらずDLL周りのエラーが生じることがありました. 原因はEXEが利用するDLLがさらにほかのDLLを参照していたことでした. つまり、EXE --(use)--> DLL1 --(use)--> DLL2 という関…

<algorithm>でポインタを使うときは型に注意

c++の<algorithm>中にはイテレータを引数に渡すことでコンテナの全要素に対して探索をする関数があります. 探索する対象が配列の場合はポインタを引数に渡すことが可能です. 例えばstd::any_of()は次のように使用することができます. #include<iostream> #include<algorithm> #include<vector> using </vector></algorithm></iostream></algorithm>…

不揮発メモリICの型番まとめ

不揮発性メモリICの型番とその種類についてざっくりまとめました. 自分用のメモなので間違ってたり一般性がないものが含まれてるでしょうが、あしからず. 24xx I2C対応不揮発性メモリ. 調べた限りではEEPROMしかなさそう. 表面実装が多いがDIPも普通に手に入…

C++でbind()が使えない

以下のコードはVisual StudioでWinsock2を使おうとしたときのものです. Microsoftのサンプルコードをコピペしただけなのでビルドできると思いきやコンパイルエラーになります. #include <iostream> #include<WinSock2.h> #include<ws2tcpip.h> #include<functional> /* これがないとリンク時にエラーになる </functional></ws2tcpip.h></winsock2.h></iostream>…

DLLで共有したデータの寿命

Windowsの動的ライブラリ(DLL)中のグローバル変数を複数のプロセスで利用する方法とそのグローバル変数の寿命についてまとめました. DLLでデータを共有する方法 DLLのデータセグメントに置かれた変数は複数のプロセスで共有可能です. なので data_seg pragma…

USBシリアル変換ICを使う

USBシリアル変換ICを使ってマイコンとシリアル通信をした時のメモです. 準備するもの 開発用PC STM32NUCLEO-F072RB USBシリアル変換IC USBシリアル変換IC用ドライバ その他 STM32CubeIDEでの作業 プロジェクトの作成 コンフィギュレーション printfの記述 フ…

C/C++でコマンドライン引数の文字数が取得できない

結論から言うとsizeof()じゃなくてstrlen()を使いましょうという話です. x86(32bit)環境で以下のようなプログラムをビルドして実行すると、いかなるコマンドライン引数であっても「size:4」と表示されます. #include<stdio.h> int main(int argc, char** argv){ if(ar</stdio.h>…

javascriptで足し算ができない

HTMLの<area>タグのcoordsに設定された属性値にjavascriptからオフセットを与えようとしたときに引き算はうまくいくのに足し算はうまくいかないという事態に遭遇しました. 以下のコードを実行して加減算をした時の各座標の値を表示してみると原因が分かります. <map name="example"> <area shape="rect" coords="50,50,150,150"> </map> <script></area>…

リンク集

個人的にたまによく使うサイトのリンク集. 完全に自分用メモ.徐々に更新 MSVC UCRT 関数リファレンス (アルファベット順) コンパイラ コマンド ラインの構文 コンパイラオプション リンカー オプション WinAPI(ヘッダ別ページへのポータル) Windows コントロ…

size_t型とは

メモリ系のライブラリやコンテナを使っているとよく見るsize_t型についてまとめました. 検証環境 size_t型は処理系依存 size_t型のtypedef宣言 Cの場合 C++の場合 size_t型の意味 検証環境 項目 説明 OS Windows11 MinGW-W64 gcc version 8.1.0 size_t型は処…

git add が出来ない

サブディレクトリ中のファイルをgit add 後にgit statusしてもファイルがuntrackedなままだった. 原因はサブディレクトリに.gitフォルダが存在していることだった. サブディレクトリの.gitフォルダを削除したらgit add できました.

ARMマイコンでNewlibを使う

STM32Nucleo上のCortex-M0でNewlib(組み込み用標準Cライブラリ)を利用してprintfしました. 箇条書きでまとめると以下のことをします. LinuxでNewlibをビルド WindowsのSTM32CubeIDEでSTM32 Projectを作成する コンパイラ、バイナリツール、libgccはIDEに付属…

ARM用のNewlibをビルドする方法

Armマイコン(Cortex-M0)でNewlibを使いたいので自分でビルドしてみました. たいていツールチェーンにバイナリとして付属してるけどね. 実行環境 ツールチェーンの取得 arm-none-eabi用のビルドの流れ 動かなかった原因 Cortex-M0用にビルド まとめ 参考 実行…

warning: using cross tools not prefixed with host triplet の意味

Newlib(組み込み用標準Cライブラリ)をarm-none-eabi用にUbuntu上でビルドしていたところ、「warning: using cross tools not prefixed with host triplet」に遭遇しました. 実行環境 項目 説明 OS Ubuntu 20.04 LTS コンパイラ x86_64 Linux hosted cross to…

ツールチェーンとコンパイラの違い

クロスコンパイラを探しているとツールチェーンというものをよく見かける. 何が違うかというと、ツールチェーンはコンパイラに加え、バイナリツール、デバッガ、ライブラリを含んでいる. 広義のコンパイラ(MinGWなど)はライブラリなども含んでいるので、正確…

GCCでリンクしているライブラリを知りたい

GCCはオプションなしでビルド工程を自動で行ってくれますが、だからこそデフォルトでリンクされているライブラリが分かりにくいです. デフォルトでリンクされるライブラリやリンカスクリプトを知りたい場合は、 -Wl,--verbose オプションをつけてリンカに--v…

WinAPIの型まとめ

WinAPI(MSVC)で頻出の型の情報をまとめました. 適宜更新するかもです. Win64環境前提です. 環境 項目 バージョン WinSDK 10.0.22621.0 呼び出し規則 結局のところすべて__stdcallと同じ意味になるが、識別子を分けることで何のための関数かはっきりさせる. …

GCCでユーザー独自のセクションを定義したときの挙動

GNUコンパイラに生成コードをユーザー独自のセクションに配置するように命令したときに、デフォルトのリンカスクリプトが使用可能か実験しました. 実行環境 独自セクションにコードを配置する exeをダンプ(デフォルトリンカスクリプトでビルド) デフォルトの…

LRESULT型とは何なのか

環境 項目 説明 OS Windows11 Windows SDK 10.0.22000.0 LRESULTは64ビットint型 minwindef.hを見ると以下のようにtypedefされています. //minwindef.h /* Types use for passing & returning polymorphic values */ typedef UINT_PTR WPARAM; typedef LONG_…

dllの中身を表示する -アンマネージ言語編-

Windowsのdllはバイナリなので基本的にはそのままでは何が何だかわかりませんが、Visual Studioについてくるdumpbin.exeを使用すると様々な情報をテキストとして表示することが出来ます. その使い方やオプションについてまとめました. 以下ホストはx64を想定…

C言語で多次元配列をポインタで扱う

多次元配列をポインタで扱う方法です. 多次元配列は結局のところ一次元配列と同じようにメモリが確保されています. 例えば、char型の2次元配列とchar型へのポインタについて、次のことが言えます 2次元配列とポインタの関係 実用上は次のようにキャストして…

C言語のポインタ

C言語のポインタおよびポインタへのポインタの使い方をまとめてみた. 主にint型とint型へのポインタを例に説明する. アドレス演算子&と間接演算子* 単項演算子の&をアドレス演算子という. 二項演算子の&はビット演算子の1つであり、&&は論理演算子の1つであ…

assignment to expression with array typeの意味

次の記事を参照 prupru-prune.hatenablog.com

invalid array assignment の意味

一言でいうと配列名をポインタとしてアドレスを再代入することは出来ないというエラーである. 配列名とポインタの区別がつく場合 配列名とポインタの区別がつかない典型例 コールした関数内ではアドレスが交換できる(ただし、この例はスワップできない) コー…

USBシリアル変換ICとは

AVRなどのMCUやフラッシュへのプログラミングには通常シリアルポートが必要になる. ただし、現代のコンピュータで物理的なシリアルポートを持っているのはまれであり、通常はUSBシリアル変換ICを介してUSBポートからプログラミングすることになる. そんなUSB…

ArduinoIDEのフォルダ構成

環境 項目 説明 OS Windows11 ArduinoIDE 2.1.0 esp32パッケージv2.0.6を別途インストールしています 全般的なファイル・フォルダ フォルダ 説明 C:\Users\<ユーザー名>\AppData\Local\Programs\Arduino IDE\Arduino IDE.exe Arduino IDE本体 C:\Users\<ユー…

WPFその1 -XAMLの書き方-

今更ながら趣味でWPF(Windows Presentation Foundation)を始めました. その過程でXAML(Extensible Application Markup Language)を書き始めたのですが、かなり独特な言語だったのでその備忘録第一弾です. 開発言語はC#を想定します. XAMLとWPFの関係 XAMLを…

Windowsでどうしてもリンクできないとき

Window用のC/C++プログラムのビルド時にどうしてもリンクできないときは以下の確認をしましょう 1. verboseオプション 2. ライブラリディレクトリの設定 3. ライブラリファイルの設定 4. シンボル情報 5.そもそも類似名のシンボルも存在しないとき 参考 1. v…

Eclipseをダークモードにする

Windows->Preference->General->Appearance のThemeをDarkにする.

LiteDB.Studioのビルド方法

C#

実行環境 項目 説明 OS Windows11 Visual Studio 2019 or 2022 .NET Framework 4.7.2 ソースコードのダウンロード LiteDB.StudioのソースコードとLiteDBのソースコードをGithubからダウンロードします. LiteDB.StudioのビルドにLiteDBが必要になります. gith…