« 音響改善グッズ | メイン | DVD RAM買いますた »
2005年02月06日
VB シフト演算 DLL
まだこの言語は乗ってなかったか...?
VB2003には乗っている模様
一番手っ取り早いのは、掛け算でVBにて計算させる。しかし遅い(VB5現在)
a << b は a*(2^b)
a >> b は a/(2^b)
高速化のためVCで適当にDLLつくるのが良い(昔はそうだった いまは知らない)
/* VC DLL ... */
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// エクスポートされた関数
__declspec(dllexport) LONG __stdcall L_shift( LONG a , LONG b )
{
return a << b;
}
__declspec(dllexport) LONG __stdcall R_shift( LONG a , LONG b )
{
return a >> b;
}
__declspec(dllexport) BYTE __stdcall L_shiftB( BYTE a , BYTE b )
{
return a << b;
}
__declspec(dllexport) BYTE __stdcall R_shiftB( BYTE a , BYTE b )
{
return a >> b;
}
っとこうやって 適当にdefにexport かいとく
LIBRARY ktshift.dll
EXPORTS
L_shift @16
R_shift @8
L_shiftB @4
R_shiftB @2
VBから呼び出すにはー
Declare Function L_shift Lib "ktshift.dll" (ByVal a As Long, ByVal b As Long) As Long
Declare Function R_shift Lib "ktshift.dll" (ByVal a As Long, ByVal b As Long) As Long
Declare Function L_shiftB Lib "ktshift.dll" (ByVal a As Byte, ByVal b As Byte) As Byte
Declare Function R_shiftB Lib "ktshift.dll" (ByVal a As Byte, ByVal b As Byte) As Byte
変数の型はそろえてね。。
投稿者 kata : 2005年02月06日 14:41
Trackback Pings
このエントリーのトラックバックURL:
http://katakuri.sakura.ne.jp/~kata/mt-tb.cgi/74