3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

C/C++開発

VisualStudio 2010 のC++で作ったバイナリはWindows2000では動かない

今更、、という感じですが、VisualStudio 2010 C++(VC10) で作成したバイナリはWindows2000では動かないようです。 動かそうとすると、「xxxx.exeは有効なWin32アプリケーションではありません。」と怒られます。 有名な話らしいですが、C++系アプリを殆ど作…

(C++)文字列結合のwcscat関数でハマった

当初、下記のようにしてたらアクセス違反の例外となりました。 TCHAR path[] = _T("d:\\a.txt"); TCHAR file[1024] = _T("d:\\a.txt"); wcscat( _T("notepad.exe "), file ); で、よく考えたら、wcscat は第一引数に、第二引数の文字列を追加するんですよね…

(C++)ファイルパスからフォルダパスを取得する

(VC++)自身のアプリケーションファイルのexeファイルのパスを取得する方法で、Windows API の GetModuleFileName 関数を使うと自身のフォルダパスを取得することができることを書きました。 で、今回はファイル名を含むフルパスから、フォルダパスを取得する…

(C++)現在のログインしてるユーザ名を取得する

現在ログインしている Windows のユーザ名を取得する方法です。 Windows API の GetUserName関数 を使えばいいようです。 使い方はこんな感じです。 //現在のユーザ名取得 TCHAR user[1024]; DWORD dwUserSize; // 取得したユーザ名の文字列の長さ if ( ! Ge…

(C/C++)Windows APIのCreateProcessWithLogonW関数を使うとEXEが落ちる

(C++)別ユーザでプロセスを起動するにて、Windows API の CreateProcessWithLogonW 関数を使うことで別ユーザ権限でプロセスを起動できることを書きました。 で、このコードをコンソールアプリケーションとしてビルドしテストしたところ、特定のマシンだけ動…

(C++)別ユーザでプロセスを起動する

Windows API を使って別のユーザでプロセスを起動する方法です。 (.Net を使えば、ProcessStartInfo.UserName や ProcessStartInfo.Password 等で簡単にできるのかもしれませんが、.Net Framework が入ってない環境を考慮して C++ と Windows API で作成しま…

(C++)ファイルの存在チェックを行う

Win32 API でファイル存在チェックを行う方法です。 PathFileExists( ファイル名 )関数を使えばいいようです。 存在すれば true ,しなければ false ( C的には1かそれ以外か) が返るようですね。 参考: WINDOWS忘却録 PathFileExists -ファイルの存在を調べる…

(C++)環境変数のパスを展開する

%systemroot% や %programfiles% との環境変数パスをC++で展開する方法です。 Win32 API の ExpandEnvironmentStrings 関数を使えばいいようです。 注意点は %appdata% だと %%appdata%% というように%でエスケープしないといけないという点です。 こんな感…

(C++)Win32APIを使ってテキストファイルを開き1行ずつ読み込もうとおもったけど...

年に1,2回ほどしか触らない C++ は相変わらず苦手な3流プログラマです。。 設定が入ってるテキストファイルを開き中身を変更するアプリを作ってるわけですが、早速ファイルオープンのところで詰まりました。 とりあえずWindows向けアプリということで Win32…

(C++)環境変数となってるパスを展開する

%systemroot% とか %ProgramFiles% とかの環境変数のパスをC++で展開する方法です。 Windowsにはそれ用のAPIが用意されているようなので、それを使えばいいようです。 APIは ExpandEnvironmentStringsを使います。 使い方はこんな感じです。 //MFCでCString…

(VC++).Net Framework対応アプリインストール前に動かすチェックツール作ってみた

(VC++).Net Framework がインストールされているかどうかを調べる方法で書いてる要件を満たすため、過去4回いろいろ書いてきましたが、それらのまとめとして、実際の C++ のコードを載せておきます。 動きとしては、.Net Framework 2.0 がインストールされて…

(VC++)自身のアプリケーションファイルのexeファイルのパスを取得する方法

exeと同じ場所にある別のexeをキックする要件だったので、ShellExecute で引数に ".\キックするexe名" としたかったのですが、これだとどうもカレントディレクトリから見た相対パスになるので、このexe自体が別のアプリから呼ばれてカレントディレクトリが変…

(VC++)Windows環境でのcharの文字コード(マルチバイトとユニコード)で混乱

Visual Studio 2008 では(VS 2005でも同じ) MFC の関数や、Win32API 関数で引数に文字列を渡すとき _T("文字列") と書かないといけないようです。 たしか、Visual C++ 6.0 のときはいらなかったよなーと思ってたので、ちょっと調べてみました。 ちなみに、_T…

(VC++)特定のサーバに接続できるかどうかを調べる方法

要件は、前回の最初に書いた通りです。 今回はインターネットでマイクロソフトのサーバにつながる状態かどうかを調べる方法です。 実装は、CSocket クラスを用いることで、簡単にできるようです。 参考にさせてもらったのは、ソケット(バイトストリーム)を使…

(VC++).Net Framework がインストールされているかどうかを調べる方法

現在のプロジェクトで作成中のアプリケーションは VB.Net で作っていますが、当然 .Net Framework がインストールされていないと動きません。 Visual Studio のセットアッププロジェクトで、必須コンポーネントととして .Net Framework を含めることができま…

(VC++)Visual Studio 2008 でMFCアプリケーションを作るときのDLL依存問題

久しぶりに C/C++ && MFC アプリケーションを作ることとなりました。 (前に作ったのは Visual C++ 6.0 時代。大昔な気がしますね) で、とりあえず MFC を使って何も加工してないVSのウィザードが作り出すダイアログアプリケーションを、セットアップしたての…