Welcome

« 音響改善グッズ | メイン | DVD RAM買いますた »

2005年02月06日

VB シフト演算 DLL

ぷろぐらむ

Download file

まだこの言語は乗ってなかったか...?
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

コメント

コメントしてください




保存しますか?