--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2012-04-12(Thu)

《VC++》デバッグができない

VC++(2008 ExpressEdition)でデバッグができなくなりました。

正確に言えば、"コンパイルはできるが、デバッガが起動しない"。
だから"デバッグ無しで開始"を選ぶと起動する。

VC++を再起動したり、プロジェクトのクリーンを行なってもダメ。

うーん、と考えること3分。ふとタスクトレイを見ると…

M○nsterHunterFr○ntierが起動してるじゃぁありませんか(´・ω・)

このゲーム、nProtectというゲームガードが入っており、その影響でデバッガが停止しているみたいです。
(当然と言えば当然…^^;)
ゲームを終了すると思った通り、デバッガが起動。自己解決となりましたとさ。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

2012-01-12(Thu)

RemoveRemovableバージョンアップ!

複数のUSBメモリをまとめて取り外すソフトRemoveRemovableのバージョンアップを行いしました。

バージョン:1.10
主な変更内容:
 ・ボリューム情報の表示に対応
 ・内部アルゴリズムの変更

ダウンロードはこちら
http://www.vector.co.jp/soft/winnt/util/se488824.html
http://gaiassoftlabo.web.fc2.com/removeremovable.html

ぜひご利用ください!

テーマ : プログラミング
ジャンル : コンピュータ

2011-08-16(Tue)

《VC++》DLLの作成・利用

VC++(2008 ExpressEdition)でDLLを作成・利用する方法を紹介します。
今回紹介するのはDLLを動的リンクする方法です。

ExpressEditionにはDLL作成用のテンプレートがありませんが、"空のプロジェクト"から作成することができます。
DLL作成用のソリューションを以下のように構築します。

DLLプロジェクト

・DllCall・・・作成したDLLの呼び出しを行うプロジェクトです。
・DlllTest・・・DLL作成用のプロジェクトです。こちらのプロジェクトはプロパティの構成をDLLに設定します。
DLLビルド


では、まずDLLのコードは以下のようになります。
[DllTest.cpp]
 1:#include <windows.h>
 2:extern "C" __declspec(dllexport)
 3:int __stdcall AddNumber(int argNumber)
 4:{
 5:  return argNumber + 1;
 6:}


2行目の[__declspec(dllexport)]はexeで利用するための宣言です。
(exeにエクスポートするという宣言)

また、[extern "C"]の宣言が無い場合、ビルド時に名前装飾が起こり、関数名が変化します。
(例:AddNumber→?AddNumber@@YGHH@Z)
このような場合、DLLのリンク時に装飾された関数名を指定しなければならなくなりますが、通常装飾関数名をexe側から得ることはできません。
(厳密に言えば、Dependency Walkerというソフトを使えばDLLの関数を知ることは可能です。)
このような名前装飾を行わないようにするため、[extern "C"]を宣言します。
ただし、この宣言を行ってもビルド後の関数名には"_"がつきます。(例:_AddNumber)
※また、ExpressEditionの場合、関数名のあとに@+引数のバイト数がつきます。(例:_AddNumber@4)

上記コードをビルドすると、libとdllファイルが生成されます。これらのファイルを用いて今回作成した関数を利用します。
(libファイルにはdllがエクスポートした関数が記録されています。)

次に呼び出し側のコードは以下のようになります。
[DllCall.cpp]
 1:#include <windows.h>
 2:#include <stdio.h>
 3:typedef int (__stdcall *FUNC_AddNumber)(int argNumber);
 4:int main(int argc, char* argv[])
 5:{
 6:  HMODULE hDll = LoadLibrary("DllTest.dll");
 7: if(hDll == NULL){
 8:  return -1;
 9: }
10:  FUNC_AddNumber AddNumber = (FUNC_AddNumber)GetProcAddress(hDll, "_AddNumber@4");
11: if(AddNumber == NULL)
12:  return -2;
13: }
14: int result = AddNumber(1);
15: printf("%d\n",result);
16:  if(!FreeLibrary(hDll)) {
17:  return -3;
18: }
19: return 0;
20:}


処理内容としては、6行目でdllをロードします。
10行目で呼び出したい関数アドレスのポインタを設定します。
14行目で実際に関数を利用し、16行目で解放しています。
10行目で関数名を指定してポインタを設定する場合、上記のDLL作成時における関数名命名則に注意して指定してください。

lib・dllファイルを先にビルドしてから呼び出し側をビルドして実行し、動作を確認します。

テーマ : プログラミング
ジャンル : コンピュータ

2011-01-03(Mon)

《VC++》GUID の"LNK2001 外部シンボルは未解決"の対処

DEFINE_GUIDを使用して、Releaseモードでビルドする際に下記のエラーが発生することがある。

error LNK2001: 外部シンボル "GUID_DEVINTERFACE_FLOPPY" は未解決です。
error LNK2001: 外部シンボル "GUID_DEVINTERFACE_DISK" は未解決です。
error LNK2001: 外部シンボル "GUID_DEVINTERFACE_CDROM" は未解決です。


これはGUIDの初期化が行われていないため発生するエラーである。
対処としては、"INITGUID.H"をGUID定義前にインクルードすれば良い。

手っ取り早い話、"stdafx.h"の先頭で"INITGUID.H"をインクルードする。

// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
#pragma once

#include <INITGUID.H>
.
.
.
#include <winioctl.h> //GUIDの定義をしているヘッダーファイル
.
.
.


詳細は下記をご覧ください。

参考:http://support.microsoft.com/kb/130869/ja

テーマ : プログラミング
ジャンル : コンピュータ

カテゴリ
検索フォーム
RSSリンクの表示
リンク
お問い合わせ

名前:
メール:
件名:
本文:

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。