PHP7とXdebugでエラーがでないときはExceptionエラーかもしれません。

Xdebug Documentation – all settings のxdebug.show_exception_traceパラメータの説明

integer xdebug.show_exception_trace = 0

When this setting is set to 1, Xdebug will show a stack trace whenever an Exception or Error is raised – even if this Exception or Error is actually caught.
Error ‘exceptions’ were introduced in PHP 7.

flashdevelopでメニューにアイテムをたす

FlashDevelopのインストール先\Settings\MainMenu.xmlにタグを追記します。
※C:\Program FilesやC:\Program Files (x86)はアクセス権限の影響で書き込めないことがあるので、エディタの保存に気を付けてください。

<button label="テスト" click="ExecuteScript" tag="Internal;C:\Users\username\Documents\Sample.cs" image="54" />

これはSample.csファイルを実行して、ツールバーにアイテムをたします。

Continue reading “flashdevelopでメニューにアイテムをたす”

sublime text3でメニューにコマンドをつくる

Windows7以降の場合:%USERPROFILE%\AppData\Roaming\Sublime Text 3\Packages\UserにMain.sublime-menuを作成。

今回はBATファイルを実行してみます。

[
    {
        "caption": "Project",
        "mnemonic": "P",
        "id": "project",
        "children":
        [
            { "caption": "テスト実行", "command": "exec", "args": {"cmd": ["C:\\Users\\username\\Documents\\project1\\run.bat"]} },
            { "command": "prompt_open_file", "caption": "Open File…", "mnemonic": "O", "platform": "!OSX" },
            { "command": "prompt_open_folder", "caption": "Open Folder…", "platform": "!OSX" },
            { "command": "prompt_open", "caption": "Open…", "platform": "OSX" }
        ]
    }
]
Continue reading “sublime text3でメニューにコマンドをつくる”

PHP7.4でGLUT(FFI extention)

PHP 7.4からFFIが使えるようになったとのことでGLUTを試してみました。

※php.iniで「extension=ffi」しておきます。

<?php
	require("gl.php");
	require("freeglut.php");

	$pargc = FFI::new("int");
	$argv = FFI::new("char**");

	$glut->glutInit(FFI::addr($pargc), $argv);
#	$glut->glutInitDisplayMode(GLUT_RGBA);
	$glut->glutCreateWindow("php ffi glut.");
	$glut->glutDisplayFunc( function () {
		require("gl.php");       #下でスコープの外に出したソースを載せています。
		require("freeglut.php");
		$gl->glClear(GL_COLOR_BUFFER_BIT); 

		$gl->glColor3f(1.0, 0.0, 0.0);

		$gl->glBegin(GL_POLYGON);
			$gl->glVertex2f(-0.5, -0.5);
			$gl->glVertex2f(0.5, -0.5);
			$gl->glVertex2f(0.5,  0.5);
			$gl->glVertex2f(-0.5,  0.5);
		$gl->glEnd();

		$gl->glFlush();
		//$glut->glutWireCube(1.0);

		echo "using memory (byte): ";
		var_dump(memory_get_usage());
	});
	$glut->glutMainLoop();

上のソースとライブラリをダウンロード

マニュアルによるとFFIで呼ぶ関数に渡すコールバック関数は終了するまでメモリをつかんだままになったり、ロードしたFFIのオブジェクトが渡らない(※追記↓)みたいだったりでまだ気を付けてください。

参考:PHP マニュアル – Basic FFI usage

コールバック関数の中でFFIした関数の呼び出しはFFI::cdefした変数を、コールバック関数の中でglobal 変数名とすることでFFIのオブジェクトを呼び出せることが分かりました。

<?php
	require("freeglut.php"); #変更
	require("gl.php");       #変更

	$pargc = FFI::new("int");
	$argv = FFI::new("char**");

	$glut->glutInit(FFI::addr($pargc), $argv);
#	$glut->glutInitDisplayMode(GLUT_RGBA);
	$glut->glutCreateWindow("php ffi glut.");
	$glut->glutDisplayFunc( function () { #変更
		global $gl; #追記

		$gl->glClear(GL_COLOR_BUFFER_BIT); 

		$gl->glColor3f(1.0, 0.0, 0.0);

		$gl->glBegin(GL_POLYGON);
			$gl->glVertex2f(-0.5, -0.5);
			$gl->glVertex2f(0.5, -0.5);
			$gl->glVertex2f(0.5,  0.5);
			$gl->glVertex2f(-0.5,  0.5);
		$gl->glEnd();

		$gl->glFlush();
		
	});

	$glut->glutMainLoop();

アプリケーションのウィンドウを半透明にするやり方(Windowsの場合)

GUIPropViewアプリケーションをダウンロードして、アプリケーション名またはウィンドウクラス名を調べて、コマンドプロンプトからGUIPropViewのアクションオプションを実行。

GUIPropView.exe /Action Transparent Alpha 150 Process:vvvv.exe Class:TMViewPatch
GUIPropView.exe /Action Transparent Alpha 255 Process:vvvv.exe Class:TMViewPatch

参考→https://www.nirsoft.net/utils/gui_prop_view.html