2015年5月14日木曜日

「GDI+ で汎用エラーが発生しました。」回避方法 (C++/CLI)

以下のプログラムではエラーが発生します。

Bitmap^ b1 = gcnew Bitmap("C:\\tmp.png");
Bitmap^ b2 = gcnew Bitmap(b1->Width, b1->Height);
Graphics^ g = Graphics::FromImage(b2);
g->DrawImage(b1, 0, 0, b1->Width, b1->Height);
b2->Save("C:\\tmp.png", System::Drawing::Imaging::ImageFormat::Png);

原因は、同一ファイル名でセーブしようしましたが、b1 がファイルオープンのままになっているからです。

b1 を解放すればエラーは回避できます。

Bitmap^ b1 = gcnew Bitmap("C:\\tmp.png");
Bitmap^ b2 = gcnew Bitmap(b1->Width, b1->Height);
Graphics^ g = Graphics::FromImage(b2);
g->DrawImage(b1, 0, 0, b1->Width, b1->Height);
delete b1;
b2->Save("C:\\tmp.png", System::Drawing::Imaging::ImageFormat::Png);

2015年4月4日土曜日

ローカル環境にアクセスすると、ダウンロード画面になってしまう。

xampp の htdocsフォルダのファイルをいろいろ修正しているうちに localhost の php が起動しなくなり毎回ダウンロード画面の表示が出るようになってしまいました。

php だけではなく http://localhost/index.html もダメでダウンロード画面が出ます。

しかしなぜか、http;//localhost/phpmyadmin/ は正常に起動しました。



やったことを思い出していろいろ試してみると治りました。

どうやら htdocs にある .htaccess が悪さをしていたようです。

ファイル名を a.htaccess などに変更すると php が正常に起動するようになりました。



2015年3月9日月曜日

VC++2005 で C言語ソースをコンパイルする方法


VC++2005 で C言語ソースをコンパイルする方法

C言語のプログラムをデバックしたいけど実機やデバッカーが無かったりしてデバックできないことあります。
VC++6.0であれば以下の①を行うとコンパイルが通るのですが VC++2005だとコンパイルが通りませんでした。
しかし、②を行えばコンパイルできるようになりました。

①プリコンパイル済みヘッダーの作成/使用 -> プリコンパイル済みヘッダーを使用しない

②C言語のソースは、拡張子を[.h]にし、 namespace と extern "C" を追加する。


例)プロジェクト名 "Mypro" とし、Form に button1 と textbox1 を配置し、
  button1 をクリックすると C言語のソースである sample.h でセットした文字列を textbox に表示するというプログラムです。

--------------------------
[ sample.h ]
--------------------------
namespace Mypro {               // namespace を追加( Mypro はプロジェクト名 )

  extern "C" {                  // extern "C" を追加

    char abab[] = "aaaa";

    char* sub(){
      return (char*)&abab;
    }
  }
}
--------------------------
[ Form1.h の抜粋 ]
--------------------------
  private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

    char* buf = sub();

    this->textBox1->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)buf);

  }

2013年9月11日水曜日

sponsorship の削除方法

1.[スタート] ボタンをクリックして、[すべてのプログラム] をクリックし、[アクセサリ]、[システム ツール] を順にポイントして、[タスク] をクリックし、「At1」を削除します。

2.[C]\[Documents and Settings]\[ユーザディレクトリ]\[Application Data]フォルダにある [DSite]フォルダを削除します。

これで sponsorship 削除完了です。

2013年9月10日火曜日

AVR Studio6 で Build すると コンパイルエラーが出る

AVR Studio5 で作ったプロジェクトを AVR Studio6 で Build すると、以下のエラーが出ます。

variable 'lun2_name' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

【解決方法】
"code" で宣言しているところを "const" に書き換えると Build に成功します。

2013年6月7日金曜日

IEでグラデーションを使う方法( border も正常に表示させたい方法)

IEでグラデーションを設定するにはCSSに以下を記述します。


例)white と cornsilk の2色でグラデーションの場合

  filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=white, endColorStr=cornsilk, GradientType=0);
  -ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=white,endColorstr=cornsilk, GradientType=0);
  zoom:1;



しかし、この方法では border が消えてしまうため、PIE.htc を利用してみる。
上記3行を次の2行に変更し、PIE.htc を htmlファイルと同一フォルダに入れておく。
(PIE.htc は無料で入手できるので探してください)


例)white と cornsilk の2色でグラデーションの場合

  -pie-background: linear-gradient(white, cornsilk);
  behavior: url(PIE.htc);



この方法を使っても border が表示されないときがありますが、
タグの記述より上にCSSの定義を記述すればOKです。
(これに気付くのに1日ハマりました)


2012年6月2日土曜日

PHP セッション保持時間をアクセス毎に延長する方法

PHP セッション保持時間をアクセス毎に延長する方法

アクセス毎に setExpirationSeconds() を実行するとセッションを延長できます。
(Zend を使用します)

例)
$Namespace = new Zend_Session_Namespace('Default'); // Zend_Session_Namespace インスタンス作成
$Namespace->setExpirationSeconds( 10 * 60 ); // セッションの保持期限( アクセス毎に10分延長 )