Win32 API��DLL�̗��p�@

�@BASIC�̌���d�l�͈̔͂ł͎��s�ł��Ȃ����Ƃ��CWin32 API�𗘗p���邱�ƂŎ��s�”\�ƂȂ邱�Ƃ�����܂��B

�@(����)�\�iBASIC(ver. 5.1)�ł́CWin32 API�C����сCWin32 API�Ɠ����Ăяo���K��̂��Ƃɍ쐬���ꂽDLL�֐������p�ł��܂��BBorland Delphi��C++�Ȃǂ̃V�X�e���J�������p���Ď��삵��DLL�����p�”\�ł��B
�@Win32 API�̗��p�ɂ́C���p������API�̊֐����ƁC���ꂪ�܂܂��DLL�̃t�@�C�����Ƃ��K�v�ł��B �܂��CAPI�̈����ɂ́C�j�[���j�b�N�ł͂Ȃ����ۂ̐��l��^����K�v������܂��B

�������[�����������͕�����ϐ��𗘗p���čs���܂��B
���ɁC�ϐ��ւ̃|�C���^�������Ƃ��ėv������DLL�֐��̗��p�ɂ͒��ӂ��K�v�ł��B

�g���������ƃV�X�e�����N���b�V�������邱�Ƃ�����̂ŁC�Ӗ��̕�����Ȃ��l�͎���o���Ă͂����܂���i�T���v���v���O�������R�s�[���y�[�X�g�œ\��t���Ď��s���Ă݂���x�ɂƂǂ߂Ă��������j�B


�O��DLL��p���鐔�l�֐��C���v���O�����̒�`

�@���p�Ғ�`�֐�����ѕ��v���O������DLL�֐��𗘗p���Ē�`���邱�Ƃ��ł���B�����C�O���̂ǂ���ł��悢��DEF���ɂ͓K�p�ł��Ȃ��B
DLL�𗘗p���Ē�`����֐��i�܂��́C���v���O�����j�ł́C FUNCTION�s�i�܂���SUB�s�j�ƁCEND FUNCTION�s�i�܂���END SUB�s�j�̊ԂɎ��̌`����ASSIGN���������B
ASSIGN DLL�t�@�C���� �C�֐���
��

FUNCTION GetVersion
   ASSIGN "kernel32.dll","GetVersion"
END FUNCTION


�@DLL�t�@�C�����́C���p���悤�Ƃ���֐����܂�DLL�̖��̂��w�肷��B�֐����́CDLL���œo�^����Ă��閼�̂��w�肷��B�֐����́C�p���̑召�̈Ⴂ�����ʂ���B
�@DLL�t�@�C�����Ɗ֐����͕�����萔�Ŏw�肷��B�|�󎞂�DLL�����[�h����̂ŁC������ϐ��𗘗p���Ďw�肷�邱�Ƃ͂ł��Ȃ��B
���l�^�̈����͏�ʃr�b�g��؂�̂Ă�32�r�b�g�����Ƃ��ĕ]�����ēn���B���v���O�����̏ꍇ�ł����Ă��ϐ������Ƃ͂Ȃ炸�C��ɒl�����ɂȂ�B
������^�̈����́C1�����ڂւ�32�r�b�g�|�C���^�Ƃ��ēn�����BBASIC�̕�����̓k���ŏI�[���ꂽ������Ƃ��ė��p�ł���B
�@�������C�󕶎�����w�肵���Ƃ��́C�k���ւ̃|�C���^�ł͂Ȃ��C�k��(�ʏ�C�����|�C���^���Ӗ�����)��n���B

���l�֐��Ƃ��Ē�`����ƁCDLL�̊֐����琧�䂪�߂��ꂽ�Ƃ���EAX���W�X�^�̒l���֐��l�ƂȂ�B���̒l�́C���32�r�b�g�̕����t�������Ƃ��ĉ��߂���B
�@������֐��Ƃ��Ē�`����ƁCDLL�̊֐����琧�䂪�߂��ꂽ�Ƃ���EAX���W�X�^�̒l���k���I�[��ASCII(�܂���Shift-JIS)������ւ̃|�C���^�Ƃ��ĉ��߂���iver. 5.7.8�j�B

��P

DECLARE EXTERNAL FUNCTION MesBox
LET n=MesBox(0,"Hello","BASIC",3)
PRINT n
END
EXTERNAL FUNCTION MesBox(owner,text$,caption$,flag)
ASSIGN  "user32.dll","MessageBoxA"
END FUNCTION 

�@�֐��l��32�r�b�g�̕����t�������ɂȂ�B�����Ȃ������Ƃ��ĉ��߂������Ƃ��́CMOD(x,2^32)��K�p����B
�@Win32 API�Ō��ʂ̌^��BOOL�ł�����̂́C��[�����^�B
�@���ʌ^�����l�łȂ�API���C����ꂽ�l�͕ʂ�API�Ăяo���̈����Ƃ��Ďg�����Ƃ��ł���B

�@Win32 API�ŕ�����������֐��ɂ́CANSI�������ΏۂƂ�����̂ƁC16�r�b�g�̃��j�R�[�h�������ΏۂƂ�����̂�2�킪���邪�C�\�iBASIC Ver.7�̓��������R�[�h��Shift-JIS�Ȃ̂ŁCANSI������������ق��C�‚܂�C�֐����̖�����A�ɂȂ��Ă���ق���p����B�i��̗�ł́CMessageBoxA ���w�肵�Ă���j
Note.
�@Ver. 7�ȊO�iVer.8�CVer.0.9�CBASICAcc�CParact BASIC�j�͓��������R�[�h��UTF-8�Ȃ̂ŁCWindows API�Ŗ�����W�����‚ق���p���C�l��n���Ƃ���WIDE$�֐���p����16�r�b�g���j�R�[�h�����ɕϊ��������̂�n���C�l���󂯎��Ƃ���ImportWIDE$��p���Ď󂯎����16�r�b�g���j�R�[�h�������UTF-8�ɕϊ�����B

�ϐ�����

�ϐ��ւ̃|�C���^�������Ɏ���DLL�֐����Ăяo���Ƃ��́C������ϐ��������ɂ���B
��Note���T�|�[�gDLL��p���ă������[�𒼐ڑ��삵�Ĉ�����p�ӂ��邱�Ƃ��ł��� �i �� MEMORY.DLL�ɂ�钼�ڃ������[�����j�B
��������o�C�g�z��Ƃ݂Ȃ����߂ɁC�K�v�ɉ�����OPTION CHARACTER BYTE��錾����B
�ϐ���DLL�֐��Ƀp�����[�^��n�����߂ɂ̂ݗp�����CDLL�֐����ϐ������������邱�Ƃ��Ȃ��ꍇ�́C�����񎮂������Ƃ��Ă��悢�B
����DLL�֐������ʂ�߂����߂ɕϐ���������������̂ł���Ƃ��́C����2�_�ɒ��ӂ���B
REPEAT$�֐��Ȃǂ𗘗p���āC�����Ƃ��ė^���镶����ϐ��̕�������DLL�̊֐����K�v�Ƃ���傫���ȏ�Ƃ��Ă����B
���̕ϐ��̒l�͑��̕ϐ����������č쐬�������̂ł����Ă͂Ȃ炸�C�܂��C���̕ϐ��͑��̕ϐ��ɑ���������Ƃ̂�����̂ł����Ă��Ȃ�Ȃ��B
�i���̕ϐ�����̑���Œl��^����ꂽ������ϐ��́C���̈�����̕ϐ��Ƌ��L����B���������āC���̕ϐ��̎��̈��DLL�֐�������������ƁC������Ƃ̕ϐ��̒l������������Ă��܂��B�j
�󂯎�����l�͕���������w��𗘗p���Ď��o���B
��Q

DECLARE EXTERNAL FUNCTION CurrDir$
PRINT CurrDir$
END
EXTERNAL FUNCTION CurrDir$
OPTION CHARACTER BYTE
FUNCTION GetCurrentDirectory(n,s$)
   ASSIGN "kernel32.dll","GetCurrentDirectoryA" 
END FUNCTION
LET s$=Repeat$(" ", 200)
LET n=GetCurrentDirectory(200,s$)
LET CurrDir$=s$(1:n)
END FUNCTION 

�@�����^�̕ϐ��ւ̃|�C���^�������Ƃ���API���Ăяo���Ƃ����C�\�iBASIC�ł͕�����ϐ��������ɂ��Ȃ���΂Ȃ�Ȃ��B
���Ƃ��΁C32�r�b�g�̐����^�̕ϐ��ɒl���󂯎��ꍇ�́C LET s$=Repeat$("#", 4)�@�����s����4�o�C�g�̗̈���m�ۂ��Ă���DLL�Ɉ����n���B�ϐ���������������Ƃ��́C���ꂼ��̕ϐ����Ƃ�Repeat$�֐������s����B
Intel x86�n��CPU�ł́C�����o�C�g�Ő��l��\���Ƃ��C��ʌ����A�h���X��ʂɈʒu ����B������ϐ����ŕ����̓A�h���X�̏����ɔz�u�����̂ŁC������ɂ͉��ʃo�C�g���珇�Ɋi�[����Ă���B
���������āC ���ʂ́C�����Ȃ������Ƃ��ĉ��߂���ꍇ�C ORD(s$(1:1)) + 2^8 * ORD(s$(2:2)) + 2^16 * ORD(s$(3:3)) + 2^24 * ORD(s$(4:4)) �B
�����t�������ɂ������ꍇ�́C���ʂ�2^31�ȏ�ł���Ƃ���2^32��������B

�\����

�@�\���̂��̂��̂������Ƃ���ꍇ�́C4�o�C�g���Ƃɋ�؂��ď��Ɉ����Ƃ��ė^����B
�@�\���̂������Ƃ��ėv������API�ɂ́C�\���̂ւ̃|�C���^�������Ƃ��ė^������̂�����B���ʂ�߂��K�v������ꍇ�ƁC�K�v�ȃ������̑傫�����s��̏ꍇ�ɂ��̌`���p������B���̏ꍇ�C�K�v�Ƃ����o�C�g���̒����̕�����ϐ���p�ӂ��C���̓��e��API�̗v���ɍ��킹�Ĉ����Ƃ��ēn���B
�@32�r�b�g����n�𕶎���ϐ��ɖ��ߍ��ނ̂ɁC���̊O���֐���`�����p�ł���B
Note. Ver. 7.4.8�ȍ~�ł͓������ʂ����‘g���֐�DWORD$�����炩���ߗp�ӂ���Ă���B

EXTERNAL FUNCTION DWORD$(n)
OPTION CHARACTER byte
LET r=MOD(n,2^8) 
LET s$=CHR$(r) 
LET n=(n-r)/2^8 
LET r=MOD(n,2^8) 
LET s$=s$ & CHR$(r) 
LET n=(n-r)/2^8 
LET r=MOD(n,2^8) 
LET s$=s$ & CHR$(r) 
LET n=(n-r)/2^8 
LET r=MOD(n,2^8) 
LET DWORD$=s$ & CHR$(r) 
END FUNCTION

32�r�b�g�������A�Ȃ����\���̂̏ꍇ�́C���̊֐��̌��ʂ�A������΂悢�B

���ʂ����o���ꍇ�́C��q�̐����^�̕ϐ��ւ̃|�C���^�������Ƃ���ꍇ�Ɠ��l�B
������ɖ��ߍ��܂ꂽ32�r�b�g�����t�����������o���O���֐����Ƃ��Ď����B
����p�́C��������̃o�C�g�P�ʂł̈ʒu��\���B�擪��0�Ƃ���B

EXTERNAL FUNCTION int32(s$,p)
OPTION CHARACTER byte
LET n=0
FOR i=1 TO 4
   LET n=n+256^(i-1)*ORD(s$(p+i:p+i))
NEXT i
IF n<2^31 THEN LET int32=n ELSE LET int32=n-2^32
END FUNCTION


�@16�r�b�g����n�𕶎���ϐ��ɖ��ߍ��ނƂ��́C���̊O���֐���`�����p�ł���B
Note. Ver. 7.4.8�ȍ~�ɂ́C�������ʂ����‘g���֐�WORD$�����炩���ߗp�ӂ���Ă���B

EXTERNAL FUNCTION WORD$(n)
OPTION CHARACTER byte
LET r=MOD(n,2^8) 
LET s$=CHR$(r) 
LET n=(n-r)/2^8 
LET r=MOD(n,2^8) 
LET WORD$=s$ & CHR$(r) 
END FUNCTION

16�r�b�g�������A�Ȃ����\���̂̏ꍇ�́C���̊֐��̌��ʂ�A������B

������ɖ��ߍ��܂ꂽ16�r�b�g�����t�����������o���O���֐������Ɏ����B
����p�́C��������̃o�C�g�P�ʂł̈ʒu��\���B�擪��0�Ƃ���B

EXTERNAL FUNCTION int16(s$,p)
OPTION CHARACTER byte
LET n=0
FOR i=1 TO 2
   LET n=n+256^(i-1)*ORD(s$(p+i:p+i))
NEXT i
IF n<2^15 THEN LET int16=n ELSE LET int16=n-2^16
END FUNCTION

WIN32 API�ɂ́C�\���̂ɕ�����ւ̃|�C���^��u�����̂�����B
������ϐ��̎��A�h���X(�ŏ��̕����ւ̃|�C���^)���擾����֐��́CCharPrev���g���č���B

EXTERNAL FUNCTION VarPtr(s$) 
FUNCTION CharPrev(s$,t$)
   ASSIGN "user32.dll","CharPrevA"
END FUNCTION
LET VarPtr=CharPrev(s$,s$)
END FUNCTION

��Note���\�iBASIC�ł́C������ϐ��̎��A�h���X�́C������ϐ��ɌŗL�̂��̂ł͂Ȃ��C�ϐ��l�̏�������������ƕω�����B

�R�[���o�b�N�֐�

Win32 API�ɂ́C�R�[���o�b�N�֐���v��������̂�����B

�\�iBASIC(ver.5.3.2�ȍ~)�ł́C�ő�10�‚܂ł�CallBack�֐����g�����Ƃ��ł��C�����́C0����9�܂ł̔ԍ��Ŏ��ʂ���B

CallBack�֐��̎w��

�@CallBack�֐��Ƃ��ė��p����葱����FUNCTION�s�܂���SUB�s�̖����Ɏ��̌`����CallBack�֐��̎��ʔԍ����w�肷��B���ʔԍ���0����9�܂ł̒萔�łȂ���΂Ȃ�Ȃ��B
���ʔԍ��́C�����̌��ɂ��Ă������Ƃ��]�܂����B
FUNCTION �֐���(�������X�g),CALLBACK ���ʔԍ�
SUB ���v���O������(�������X�g),CALLBACK ���ʔԍ�


�@�����͂��ׂĒl�����ɂȂ�B�k���I�[������ւ̃|�C���^�͕�����ϐ��Ɏ󂯂Ƃ邱�Ƃ��ł���B
�@����ȊO�̈����͂��ׂ�32�r�b�g�����t�����Ƃ��Đ��l�ϐ����Ɋ��蓖�ĂȂ���΂Ȃ�Ȃ��B �i�k���I�[������ւ̃|�C���^�ȊO�̃|�C���^�𕶎���ϐ��Ŏ󂯂Ă͂����Ȃ��B�j
�@32�r�b�g�𒴂���傫�������ˆ����́C32�r�b�g���Ƃɕ������Đ��l�ϐ��Ŏ󂯎��B �@�R�[���o�b�N�֐��̑S����(���ߑ����܂�)�̃o�C�g���ƁC�������X�g�ɏ����������̐���4�{�Ƃ���v���Ȃ���΂Ȃ�Ȃ��B
�@�^�U�l�͐��l�ϐ��Ŏ󂯎��B��[����^�Ɖ��߂���΂悢�B �@�^�U�l���֐��̌���(�߂�l)�Ƃ��ėv�����ꂽ�Ƃ��́C�^�̂Ƃ�1(�܂���-1)�C�U�̂Ƃ�0��Ԃ��΂悢�̂����ʁB

CallBack�֐��̃A�h���X�̎擾

�@CallBack�֐��̃A�h���X��CallBackAdr�֐��Ŏ擾����B�����́CCallBack�֐��̎��ʔԍ��B

�g�p��

100 OPTION CHARACTER BYTE
110 LET Name$ = REPEAT$(CHR$(0),255)
120 CALL EnumWindows(CallBackAdr(1), 0)
130 SUB EnumWindows(IpEnumFunc, IPalam)
140    ASSIGN "user32.dll","EnumWindows"
150 END SUB
160 FUNCTION GetWindowText(hWnd,IpString$,cch)
170    ASSIGN "user32.dll","GetWindowTextA"
180 END FUNCTION
190 FUNCTION Enum(Handle), CALLBACK 1
200    IF GetWindowText(Handle, Name$, LEN(Name$))<>0 THEN
210       PRINT NAME$(1:POS(NAME$,CHR$(0))-1)
220    END IF
230    LET Enum = -1
240 END FUNCTION
250 END


����
�@CallBack�֐���񓯊��̌Ăяo���ɗ��p���Ȃ��ł��������B
�@�����̌��̌��͖|�󎞂ɂ����s���ɂ��`�F�b�N����܂���B�����̌��̌��́C�V�X�e���ɏd��ȑ�����^����”\��������܂��B

DLL�̓��I�ȗ��p

DLL���ʂ�DLL�ɂ���֐����Ăяo���Ƃ��C���炩���߂���DLL��ǂݍ���ł����K�v�����邩���m��Ȃ��B
���̏ꍇ�CDll���������ɂ���LoadLibrary�����s���C���̌��ʁi�n���h���j�𐔒l�ϐ��ɕۑ��i�������C���̒l��0�̂Ƃ��CLoadLibrary�͎��s���Ă���j�B���̒l�Ɗ֐�����GetProcAddress�ɓn���ăA�h���X���擾����B�K�v�Ȃ��Ȃ�����C�ۑ����Ă�����DLL�̃n���h���������ɂ���FreeLibrary���Ăяo���B

FUNCTION LoadLibrary(s$)
   ASSIGN "kernel32.dll","LoadLibraryA"
END FUNCTION
FUNCTION GetProcAddress(n,s$)
   ASSIGN "kernel32.dll","GetProcAddress"
END FUNCTION
SUB FreeLibrary(n)
   ASSIGN "kernel32.dll","FreeLibrary"
END SUB

2�i�C16�i�\��

�@Full BASIC�̑g���݊֐��𗘗p���āC2�i�C16�i�\�����ꂽ���l���������Ƃ��ł���B

BVAL(a$,2)     a$��񕉂�2�i�����Ƃ��ĉ��߂����l�B
BVAL(a$,16)    a$��񕉂�16�i�����Ƃ��ĉ��߂����l�B

BSTR$(n,2)     �񕉂̐���n��2�i���Ƃ��ĕ\������������B
BSTR$(n,16)    �񕉂̐���n��16�i���Ƃ��ĕ\������������B

�� BSTR$(MOD(n, 2^32),16)�@32�r�b�g�̕����‚�����n�𕄍��Ȃ�������16�i�\�L������ɕϊ�����B

�댯��

�@DLL�ɂ͈����̎󂯓n����������̌��ȂǂɊւ����񂪊܂܂�Ă��Ȃ�����C�����̌��̌��͖|�󎞂ɂ����s���ɂ��`�F�b�N���邱�Ƃ��ł��Ȃ��B�i�ꌩ�C����ɓ��삵�Ă���悤�Ɍ����邱�Ƃ�����̂ŁC���ӁB�j

�ϐ������Ƃ��ėp���镶����̒������s�����Ă����Ƃ��CDLL�֐��̎��s���̂͐���ɍs����”\���������B�������C���̕ϐ����邢��BASIC�̃V�X�e�����g�p����̈悪�j�󂳂�邽�߁C�Ȍ�̓���Ɏx����������BDLL�֐��̌Ăяo���͐���ɍs���邽�߁C���������‚��ɂ����o�O�ɂȂ�B

���l�ϐ��ւ̃|�C���^���w�肷�ׂ��Ƃ���ɐ��l�ϐ����w�肷��ƁC���̒l���A�h���X�Ƃ��ĉ��߂��C������DLL�֐����f�[�^�������߂����ƂɂȂ�B�i�^��������extype=-9900�̃G���[�ɂȂ邪�C�^����������BASIC�̃f�[�^�̈悾�ƃG���[�ɂȂ炸�Ɏ��s����Ă��܂��j


Visual BASIC����API���̗��p

�@Visual BASIC�Ŏg�����߂�Win32 API���́C�\�iBASIC�Ŏg�����߂ɕK�v�ȏ�񂪂��ׂĊ܂܂�Ă���̂ł����Ɏg����B�i�������CVB�Ŏg����API�����ׂď\�iBASIC�Ŏg����킯�ł͂Ȃ��B�j
VBWin32API�֐��錾���W���[�� �@�ʓr�CLhaplus����LZH�𓀃\�t�g���K�v�B

���́CVB�Ŏg�����߂̉���ł͂Ȃ����CDLL������������Ă���B
Win32 API �֐����X�g

�ȉ��́CC����ɂ��Win32 API�̉���B�ړI��API���ǂ�DLL�Ɋ܂܂�邩���C�ʓr�C���ׂ�K�v������B
Win32 API����

�֐���`

Visual BASIC�����̏������ƂɊ֐���`�����ꍇ�͎��̂悤�ɂ���B

��
Declare Function PolyBezierTo Lib "gdi32" ( ByVal hDC As Long, ByRef Points As POINT, ByVal PointNum As Long) As Long

FUCTION PolyBezierTo(hDC, Points$, PointNum)
   ASSIGN "gdi32.dll","PolyBezierTo"
END FUNCTION


��
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( ByVal FileName As String, ByRef FindData As WIN32_FIND_DATA) As Long

 
FUNCTION FindFirstFile(FileName$, FindData$)
   ASSIGN "kernel32.dll","FindFirstFileA"
END FUNCTION


��
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Boolean

FUNCTION CloseHandle(hObject) 
   ASSIGN "kernel32.dll","CloseHandle"
END FUNCTION


Lib�ɑ����Ďw�肳��Ă���̂�DLL���B".dll"��t�����Ďw�肷��B
Alias�ɑ����Ďw�肳��Ă���̂��CDLL�֐����BAlias���Ȃ��Ƃ��́C�֐��������̂܂�DLL�֐����B

ByVal ��� As Long�i���邢�́CByVal ��� As Integer�CByVal ��� As Byte�j�ƂȂ��Ă���ϐ��ɂ͐��l�ϐ������w�肷��B
ByVal ��� As String �ƂȂ��Ă���ϐ��ɂ͕�����ϐ������w�肷��B
ByRef ��� As ��� �ƂȂ��Ă���ϐ��ɂ͕�����ϐ������w�肷��B
ByVal ��� As Any �ƂȂ��Ă���ϐ��́C�g�����ɂ���ăA�h���X����������C���l���������肷��̂ŁC�ړI�ɂ���ĕ�����ϐ��C���l�ϐ����g��������B�Ȃ��C�֐�����ς���΁C����API�֐����g���֐���`�����������Ă����Ȃ��B
ByVal ��� As String �ƂȂ��Ă���ꍇ�ł��C���ʂ������߂����߂ɕ�����ϐ����g���Ă���ꍇ�́C�ϐ������̏ꍇ�̒��ӂ����Ă͂܂�B
��Note��Visual BASIC 6 �ŁCByVal��ByRef���w�肳��Ȃ�������ByRef(�Q�Ɠn��)�B�������CByVal�ɑ����ĕ����̈������������Ƃ��C�����ɂ�ByVal�����肳���B

Function�̌��ʂ̌^�����ł����Ă��C���l�֐��Ƃ��Ē�`����B
���ʌ^��Boolean�̂Ƃ��́C��[��������ꂽ�Ƃ��^�Ɖ��߂���΂悢�B
���ʌ^��String�̏ꍇ�CBASIC�ł���𕶎���Ƃ��ė��p���邱�Ƃ͂ł��Ȃ����C�ʂ�API�֐��̈����Ƃ��ė��p���邱�Ƃ͂ł���B�����������Ƃ��C�������͐��l�ϐ��Ő錾���Ă����B

�@�֐��̖߂�l�𗘗p���Ȃ�DLL�֐��͕��v���O�����ɂ��Ă��悢�B
��

SUB CharUpper(s$)
   ASSIGN "user32.dll","CharUpperA"
END SUB


��Memo��CharUpper�𐔒l�֐��Ƃ��Đ錾�����Ƃ��C�������ɕ����񎮂�^����ƁC���ʂ͕����񎮂�]������̂Ɏg�p������Ɨ̈���w�����C���̗̈�́C�֐���`�̎��s���ɉ������Ă��܂��̂ŁC���̒l�́C����ꂽ���_�ňӖ��������Ă���B

���[�U�[��`�^

�@VB��integer��16�r�b�g�����t�������Clong��32�r�b�g�����t�������B

��

Type POINTL
        x As Long
        y As Long
End Type

POINTL�^��8�o�C�g���L����B
POINTL�^�̕ϐ��𕶎���ϐ�s$�ɖ��ߍ��ނƂ��́Cs$�� DWORD$(x) & DWORD$(y)��A������΂悢�B


��

Type POINTS
        x  As Integer
        y  As Integer
End Type

POINTS�^��4�o�C�g���L����B
POINTS�^�̕ϐ��𕶎���ϐ�s$�ɖ��ߍ��ނƂ��́Cs$�� WORD$(x) & WORD$(y)��A������΂悢�B


��

Type OUTPUT_DEBUG_STRING_INFO
        lpDebugStringData As String
        fUnicode As Integer
        nDebugStringLength As Integer
End Type

String�͕�����ւ̃|�C���^�łS�o�C�g���L����B

�����Ӂ�
�@4�o�C�g�̕ϐ��͕K��4�̔{���̃A�h���X�ɒu�����Ȃǂ̋K�������邽�߂ɁC�O�����珇�ɃT�C�Y�����Z���Ă������ꍇ�ƈʒu���قȂ邱�Ƃ�����i��������ɖ��ʂȗ̈悪�ł���j�B
���Ƃ��΁C1�o�C�g�̕ϐ��̎���4�o�C�g�̕ϐ����‚Ȃ���Ƃ��́C�Ԃ�3�o�C�g�̖��ߑ�������B
��

Type ACE_HEADER
        AceType As Byte
        AceFlags As Byte
        AceSize As Long
End Type

ACE_HEADER�^��8�o�C�g���L���CAceFlags��AceSize�̊ԂɂQ�o�C�g�̖��ߑ�������B

���l�i�萔�j

�@Visual BASIC��&H�`�`��16�i�����Ӗ�����B������&��long�^�̈Ӗ��i�������Ă����Ȃ��j
�� &H1000�́CBVAL("1000",16)�ɏ����ς���B
�� 12&�́C���ʂ�12�Ɖ��߂���B16�i���ł͂Ȃ��B
�\�iBASIC�ɂ͒萔�錾�̍\���͂Ȃ��̂ŁC�ϐ��ւ̑���ɒu��������B
��@�@Public Const HELP_COMMAND = &H102&
�@ �́CLET HELP_COMMAND = BVAL("102",16) �ɕς���B
���_�CLET HELP_COMMAND = 258�@�@ �ł��悢�B


�T���v��

�@Windows�̃R���\�[������o�͂ɗ��p����B
�R���\�[���o�͂̌�C�R���\�[�����͂��󂯕t����B�����������‚����͂��ăG���^�[�L�[�������B

100 DECLARE EXTERNAL FUNCTION GetStdHandle
110 DECLARE EXTERNAL SUB AllocConsole,FreeConsole,WriteFile,CloseHandle 
120 LET o$=REPEAT$("#",4)   ! 4�o�C�g�m��
130 CALL AllocConsole
140 LET STD_INPUT_HANDLE=-10
150 LET STD_OUTPUT_HANDLE=-11
160 LET n=GetStdHandle(STD_OUTPUT_HANDLE)
170 FOR i=1 TO 30   ! �o�͕�����̍쐬
180    LET s$=STR$(i) & "  " & STR$(SQR(i)) & CHR$(13) & CHR$(10)
190    CALL WriteFile(n, s$ ,LEN(s$),o$,0)
200 NEXT i
210 CALL CloseHandle(n)
220 LET n=GetStdHandle(STD_INPUT_HANDLE)
230 LET inp$=REPEAT$("#",1)   ! 1�o�C�g�m��
240 DO 
250    CALL ReadFile(n,inp$,1,o$,0)    ! �L�[����
260    PRINT inp$(1:1);
270    IF inp$=CHR$(10) THEN EXIT DO   ! �G���^�[�L�[�������ƏI���
280 LOOP
290 CALL CloseHandle(n)
300 CALL FreeConsole
310 END
320 EXTERNAL FUNCTION GetStdHandle(n)
330 ASSIGN  "kernel32.dll","GetStdHandle"
340 END FUNCTION
350 EXTERNAL SUB AllocConsole
360 ASSIGN  "kernel32.dll","AllocConsole"
370 END SUB
380 EXTERNAL SUB FreeConsole
390 ASSIGN  "kernel32.dll","FreeConsole"
400 END SUB
410 EXTERNAL SUB WriteFile(n,s$,LENGTH,o$,a)
420 ASSIGN  "kernel32.dll","WriteFile"
430 END SUB
440 EXTERNAL SUB ReadFile(n,s$,LENGTH,o$,a)
450 ASSIGN  "kernel32.dll","ReadFile"
460 END SUB
470 EXTERNAL SUB CloseHandle(n)
480 ASSIGN  "kernel32.dll","CloseHandle"
490 END SUB

�T���v��(2)

�@Windows API��createFile�𒼐ڗp���ăt�@�C����ǂށB

100 OPTION CHARACTER BYTE
110 DECLARE EXTERNAL FUNCTION CreateFile
120 DECLARE EXTERNAL SUB ReadFile,CloseHandle 
130 LET Name$="C:\BASICw32\README.TXT"          ! ���݂̃e�L�X�g�t�@�C�����w�肷��
140 LET GENERIC_READ=BVAL("80000000",16)
150 LET OPEN_EXISTING=3
160 LET FILE_ATTRIBUTE_NORMAL=BVAL("80",16)
170 LET s$=REPEAT$("#",1)    ! 1�o�C�g�m��
180 LET w$=REPEAT$("#",4)  ! 4�o�C�g�m��  
190 LET hfile=CreateFile(Name$,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
200 IF hfile<>-1 THEN
210    DO
220       LET t$=""
230       DO
240          CALL ReadFile(hfile,s$,1,w$,0)
250          IF s$=CHR$(13) THEN                ! chr$(13)�̎���chr$(10)�ł���Ɖ���
260             CALL ReadFile(hfile,s$,1,w$,0)
270             EXIT DO
280          END IF        
290          IF ORD(w$(1:1))=0 THEN EXIT DO
300          LET t$ = t$ & s$(1:1)              
310          ! ��̕���(1:1)���Ȃ��ƁCt$=""�̂Ƃ��Cs$��t$�ɑ������Ă��܂��B
320       LOOP       
330       PRINT t$
340       IF ORD(w$(1:1))=0 THEN EXIT DO
350    LOOP
360    CALL closeHandle(hfile)
370 ELSE
380    PRINT "�G���["
390 END IF
400 END
410 
420 EXTERNAL FUNCTION CreateFile(Name$, acc ,share, sec, create, attrib, handle)
430 ASSIGN "kernel32.dll","CreateFileA"
440 END FUNCTION
450 
460 EXTERNAL SUB ReadFile(handle, s$, l, w$, ov )
470 ASSIGN "kernel32.dll","ReadFile"
480 END SUB
490 
500 EXTERNAL SUB CloseHandle(handle)
510 ASSIGN "kernel32.dll","CloseHandle"
520 END SUB

�\�iBASIC�f���‚��

�@�N���񂩂�̏��ł��B

���s���ʁi�e�L�X�g�o�́j�̃E�B���h�E���ő剻����

100 DECLARE EXTERNAL FUNCTION FndWnd
110 DECLARE EXTERNAL FUNCTION ShowWnd
120 LET hWnd=FndWnd("TTextForm","") 
130 IF hWnd>0 THEN
140    LET n=ShowWnd(hWnd, 3)
150 END IF
160 ! �����ɕK�v�ȏ���(PRNIT���Cetc)������
170 END
180  
190 EXTERNAL FUNCTION FndWnd(lpClassName$,lpWindowName$)
200 ASSIGN "user32.dll","FindWindowA"
210 END FUNCTION
220  
230 EXTERNAL FUNCTION ShowWnd(hWnd, nCmdShow)
240 ASSIGN "user32.dll","ShowWindow"
250 END FUNCTION
ShowWnd(hWnd, 3)�@�̑�Q������
HIDE =�@�@�@�@�@�@�@0
NORMAL =�@�@�@�@�@�@1
SHOWMINIMIZED =�@�@ 2
MAXIMIZE =�@�@�@�@�@3
SHOWNOACTIVATE =�@�@4
SHOW =�@�@�@�@�@�@�@5
MINIMIZE =�@�@�@�@�@6
SHOWMINNOACTIVE =�@ 7
SHOWNA =�@�@�@�@�@�@8
RESTORE =�@�@�@�@�@ 9
SHOWDEFAULT =�@�@�@10
FORCEMINIMIZE =�@�@11

FndWnd�̑�1�p�����[�^�́C�`��E�B���h�E�ł́C"TPaintForm"�CInput�_�C�A���O�ł�"TInputDialog"�ł��B
BASIC�𕡐��N�����Ă���Ƃ��́CFndWnd�̑�2�p�����[�^�ɁC�E�B���h�E�̏�[�ɕ\�������E�B���h�E�̖��O�i�v���O�������̖�����.TXT�܂���.BMP�ɕς������́j���w�肵�܂��B

���⑫��CHARACTER INPUT���̎��s���ɕ\�������E�B���h�E��"TCharInput"�ł��B

MIDI�����𗘗p���ĒP�����o��

DECLARE EXTERNAL FUNCTION midiOpen
DECLARE EXTERNAL FUNCTION midiMsg
DECLARE EXTERNAL FUNCTION midiClose
! ���p�”\��MIDI�f�o�C�X�̐����l��
DECLARE EXTERNAL FUNCTION midiGet 
OPTION CHARACTER byte ! �����T�C�Y���P�o�C�g�ɂ���

LET hmid$=REPEAT$("*",4) ! �l�o�C�g���p��

LET Note=70 !���K(&H00����&H7F(127))
LET Inst=0 !�y��No(�f�l���F�ԍ��ɏ����H�j
LET Vol=BVAL("7F",16) !����(&H00����&H7F(127))

IF midiGet<1 THEN STOP ! MIDI�f�o�C�X���Ȃ���ΏI��
LET n=midiOpen(hMid$, -1, 0, 0, 0)

! ������𐔒l�ɕϊ�
LET hMidiOut=0
LET k=1
FOR i=1 TO 4
   LET hMidiOut = hMidiOut + k*ORD(hMid$(i:i))
   LET k = k*256
NEXT i

LET n=midiMsg(hMidiOut, BVAL("c0",16) + Inst * 256)
LET n=midiMsg(hMidiOut, BVAL("90",16) + Note * 256 + Vol * 256 * 256) 
WAIT DELAY 1
LET n=midiMsg(hMidiOut, BVAL("80",16) + Note * 256)
LET n=midiClose(hMidiOut)

END
EXTERNAL FUNCTION midiOpen(lphMidiOut$,uDeviceID,dwCallback,dwInstance,dwFlags)
ASSIGN "winmm.dll","midiOutOpen"
END FUNCTION

EXTERNAL FUNCTION midiMsg(hMid,Dt)
ASSIGN "winmm.dll","midiOutShortMsg"
END FUNCTION

EXTERNAL FUNCTION midiClose(hMid)
ASSIGN "winmm.dll","midiOutClose"
END FUNCTION 

EXTERNAL FUNCTION midiGet
ASSIGN "winmm.dll","midiOutGetNumDevs"
END FUNCTION 

WAV�t�@�C�������t����

DECLARE EXTERNAL FUNCTION PlaySound

LET S$="***.wav"
LET n=PlaySound(S$, "", 128) 
END

EXTERNAL FUNCTION PlaySound(pszSound$, hmod$, fdwSound)
ASSIGN "winmm.dll","PlaySoundA"
END FUNCTION 

�ėpDLL���g��

�@Visual BASIC��C����p�ɍ��ꂽDLL���g�����Ƃ��ł���B
8�r�b�g�C���邢��16�r�b�g�̈����́C�X�^�b�N�ɂ�32�r�b�g���E�ɂ��킹�ăZ�b�g����邽�߁C�����̈�����32�r�b�g�l��^���Ă��x��͂Ȃ��i��ʃr�b�g�����������j�B
���ʌ^��8�r�b�g�C���邢��16�r�b�g�ł���֐��̒l���g���Ƃ��́CMOD(x,2^8)�܂���MOD(x,2^16)��K�p���ď�ʃr�b�g��؂�̂Ă�BVisual BASIC��Boolean�^��16�r�b�g�Ȃ̂ŁCVisual BASIC��p�ɍ��ꂽDLL���g���ꍇ�͒��ӂ��K�v��������Ȃ��B

�f�B�X�p�b�`�C���^�[�t�F�[�X�ɑΉ����Ȃ�COM�R���|�[�l���g�C��ʕ\���𔺂�ActiveX�Ȃǂ́CVB�CDelphi�CC++�ȂǁC�������DLL�����������p����B

��Note��stdcall�iWin32 API�̌Ăяo���K��j�ŃR���p�C�����ꂽ�֐����Ώۂł��邪�Ccdecl(C����̕W���̌Ăяo���K��)�ŃR���p�C�����ꂽ�֐����Ăяo���Ă��Ƃ肠���������B

��Note��C����ō쐬���ꂽDLL�ɂ́CDLL���œo�^����Ă���֐������}�j���A���ɏ����Ă���̂ƈႤ���̂�����B

��Note��DLL�����[�h�ł��Ȃ��G���[�ɂȂ�Ƃ��́CDLL���t���p�X���Ŏw�肷�邩�CDLL��path�̒ʂ����t�H���_�ɒu���C���邢�́C�v���O������DLL������̂Ɠ����t�H���_�ɕۑ����Ă�����s����B

UNLHA32.DLL���g��

UNHLA32.DLL�́C�}�j���A����C��������ɏ�����Ă��邪�C�g����B
�ł��P����LHA�݊��@�\�������Ǝ��̂悤�ɂȂ�B

100 REM UNLHA32.DLL��LHA�Ƃ��Ďg��
110 SUB UNLHA(HWND,CMD$,BUF,NBUF)
120    ASSIGN "UNLHA32.DLL","Unlha"
130 END SUB
140 SUB LHA(CMD$)
150    CALL UNLHA(0,CMD$,0,0)
160 END SUB
170 SET DIRECTORY "c:\****"         ! �J�����g�E�f�B���N�g�����ړ�����
180 CALL LHA("a ****** *****.txt")  ! �����ɁCLHA�̃R�}���h���w�肷��
190 END

VBIOSCM���g��

�@VBIOSCM�́CVB6�p�ƂȂ��Ă��邪�C�P���ɓǂݑւ��邾���Ŏg����B
Visual BASIC�� x and 1 �́CMOD(x,2)�ɒu��������΂悢�B

�T���v���v���O�����iWindows Me��Windows XP(SP2)�œ�����m�F�BIBM PC�݊��@�ȊO�ł͐�΂Ɏ��s���Ȃ��ł��������B�j

DECLARE EXTERNAL FUNCTION IOSCM_Start, InpB, InpD, InpW
DECLARE EXTERNAL SUB IOSCM_Stop, OutB, OutD, OutW
REM DOS/V�@�Ńr�[�v����‚炷
IF MOD(IOSCM_Start,2)=0 THEN
   LET port=BVAL("61",16)
   LET n=InpB(port)
   CALL OutB(port,INT(n/4)*4+3)  !�‚炷
   PAUSE
   CALL OutB(port,INT(n/4)*4)    !�~�߂� 
   CALL IOSCM_Stop
ELSE
   PRINT "IOSCM Init Error!!"
END IF
END

EXTERNAL FUNCTION InpB (port)
FUNCTION InpB_org(port)
   ASSIGN "VBIOSCM_DLL.DLL", "_InpB@4" 
END FUNCTION
LET InpB=MOD(InpB_org(port),2^8)      ! ����8�r�b�g�����o��
END FUNCTION

EXTERNAL FUNCTION InpW (port)
FUNCTION InpW_org(port)
   ASSIGN "VBIOSCM_DLL.DLL", "_InpW@4"
END FUNCTION
LET InpW=MOD(InpW_org(port),2^16)    ! ����16�r�b�g�����o��
END FUNCTION

EXTERNAL FUNCTION InpD(port)
ASSIGN "VBIOSCM_DLL.DLL", "_InpD@4"
END FUNCTION

EXTERNAL SUB OutB(port, dat)
ASSIGN "VBIOSCM_DLL.DLL", "_OutB@8"
END SUB

EXTERNAL SUB OutW(port, dat)
ASSIGN "VBIOSCM_DLL.DLL", "_OutW@8"
END SUB

EXTERNAL SUB OutD(port, dat)
ASSIGN "VBIOSCM_DLL.DLL", "_OutD@8"
END SUB

EXTERNAL FUNCTION IOSCM_Start
ASSIGN "VBIOSCM_DLL.DLL", "_IOSCM_Start@0"
END FUNCTION

EXTERNAL SUB IOSCM_Stop 
ASSIGN "VBIOSCM_DLL.DLL", "_IOSCM_Stop@0"
END SUB

jconvlib���g��

�@jconv.dll�́C DLL�ɓo�^���ꂽ�֐��̖��O���}�j���A���̋L�q�ƈقȂ�Ƃ������������ꂽDLL�ł���B

�܂��Cjconv.h������ƁC

typedef enum {
  JC_AUTO,
  JC_UTF_7,
  JC_ISO2022JP,
  JC_UTF_8,
  JC_SHIFT_JIS,
  JC_EUC_JP,
  JC_UTF_16_B,
  JC_UTF_16_L,
  JC_UCS_4_B
} JC_JCODE_TYPE;

�Ƃ���B����́CJC_JCODE_TYPE�^�̒�`�ŁCJC_AUTO�CJC_UTF_7�C����ɁC0����n�܂鐔�l�����Ɋ��蓖�Ă��Ă��邱�Ƃ��Ӗ�����BBASIC�ł́C���ꂼ��ɏ���0����n�܂鐔�l�������Ă����Ύg���₷���B

DLL���̃��C���̊֐�jconv���g�����߂�
FUNCTION jconv(InType,In$,InLen,OutType,Out$)
�@�@ ASSIGN "jconv.dll","jconv"
END FUNCTION

�Ƃ���ƁC�|�󎞂Ɂujconv���݂‚���Ȃ��v�̃G���[�ɂȂ�B�iDLL�̓��[�h�ł�������ǂ��C�֐��̃G���g���[�|�C���g���݂‚���Ȃ��Ƃ������Ɓj
DLL Analyze AZUKI�Œ��ׂ�ƁC�֐�����jconv�� _jconv@20 �ɕς���Ă��܂��Ă���炵�����Ƃ��킩��B

jconv.dll�̎g�p�T���v���ishift�|JIS�������Windows�̃��j�R�[�h������ɕϊ��j

100 OPTION CHARACTER BYTE
110 SUB MesBoxW(owner,text$,caption$,flag)
120    ASSIGN  "user32.dll","MessageBoxW"
130 END SUB 
140 FUNCTION jconv(InType,In$,InLen,OutType,Out$)
150    ASSIGN "jconv.dll","_jconv@20"
160 END FUNCTION
170 LET  JC_AUTO=0
180 LET  JC_UTF_7=1
190 LET  JC_ISO2022JP=2
200 LET  JC_UTF_8=3
210 LET  JC_SHIFT_JIS=4
220 LET  JC_EUC_JP=5
230 LET  JC_UTF_16_B=6
240 LET  JC_UTF_16_L=7
250 LET  JC_UCS_4_B=8
260 LET s1$="����ɂ���"
270 LET s2$="BASIC"
280 LET t1$=REPEAT$("##",LEN(s1$)+1)  ! ���ʂ��󂯎�邽�߂̍�Ɨ̈� 
290 LET t2$=REPEAT$("##",LEN(s2$)+1)  ! ���ʂ��󂯎�邽�߂̍�Ɨ̈�
300 LET text$=t1$(1:jconv(JC_SHIFT_JIS,s1$,LEN(s1$),JC_UTF_16_L,t1$))
310 LET caption$=t2$(1:jconv(JC_SHIFT_JIS,s2$,LEN(s2$),JC_UTF_16_L,t2$))
320 CALL MesBoxW(0,text$,caption$,3)
330 END


�����P��Visual C++�ō쐬���ꂽDLL�Ŋ֐�����F�����Ȃ��Ƃ��́C�֐����̑O��_(�A���_�[�X�R�A)�C�֐����̌��@�ƈ����̌���4�{������(=�����̃o�C�g��)��t�����Ă݂�B

�����Ӂ� �󕶎���͋󕶎���ւ̃|�C���^�ł͂Ȃ�null�ɂȂ�̂ŁC�󕶎����jconv�ɓn���ƃG���[�ɂȂ�B

���⑫��shift-JIS�������Windows�̃��j�R�[�h������ɕϊ������������Ȃ�Win32 API�łł���B ���̎��DLL���L�p�Ȃ̂́CUTF-8�Ƃ̕ϊ����ł��邱�ƁB

Double�^������ϐ������ɂƂ�DLL

�� ����������̌v�Z ������ɂ�鐔�����v�Z����DLL

����DLL��C����̌Ăяo���K��_cdecl�ł��邪�C�g����B
����DLL�͎����l�̓��o�͂��\���̏�ōs���B�����͍\���̂ւ̃|�C���^�ł���B
�{BASIC�ł͍\���̂̃o�C�g���̕�������m�ۂ��C���̃A�h���X��DLL�ɓn���B
Double�^�����l���\���̏�ɃZ�b�g����̂ɑg���֐�PackDBL$���g���B
180�s��PackDBL$(x)�́Cx��Double�^�ɕϊ�����8�o�C�g�̕�����ɖ��ߍ��ށB
190�s��UnPackDBL�֐��͂��̋t�̑�����s���B
���p�Ғ�`�֐���DWord$��VarPtr��Library�t�H���_��APISUP1.LIB�Œ�`����Ă���̂ŁCMERGE���œǂݍ���ŗ��p����B

100 DECLARE EXTERNAL FUNCTION  DWord$, VarPtr
110 OPTION CHARACTER byte
120 FUNCTION StrCalc(PSTRCALC_PARAM$)
130    ASSIGN "StCalc35.dll","StrCalc"
140 END FUNCTION
150 LET x=2.1
160 LET y=3.3
170 LET s$="5*x-4*y" 
180 LET Param$=DWord$(VarPtr(s$))  & REPEAT$(CHR$(0), 4+4+4)  & PackDBL$(x) & PackDBL$(y) & REPEAT$(CHR$(0),8)
190 IF StrCalc(Param$)=0 THEN  PRINT UnPackDBL(Param$(33:40))
200 END
210 MERGE "APISUP1.LIB" 

�����l��Ԃ�DLL�֐�

�@���ʂ̌^��Double�Ȃǂ̎����l��Ԃ��֐���BASIC�̊֐��Ɋ��蓖�Ă邽�߂ɂ́C
ASSIGN DLL�t�@�C���� �C�֐��� ,FPU
�̌`��ASSIGN���������B
���̌`��ASSIGN�������s����ƁCFPU�̃X�^�b�N�g�b�v���W�X�^��POP���Ă��̒l��BASIC�̊֐��l�Ƃ���B

��@EPMATH

����DLL�ɂ́C
__declspec(dllexport) double Kaiseki(char *mojiretu, int *ERR); �b����p
__declspec(dllexport) double __stdcall Kaiseki_VB(char *mojiretu, int *ERR); �u�a�p
��2�‚̊֐�����`����Ă���̂ŁC�����ł́C���̂u�a�p�𗘗p����B
���̊֐��́C�����Ŗ��O�� _Kaiseki_VB@8 �ƕς���Ă��܂��Ă���B BASIC�ł͎��̂悤�Ɏg���B

100 FUNCTION kaiseki(s$,e$)
110    ASSIGN "EpMath.dll", "_Kaiseki_VB@8", FPU
120 END FUNCTION 
130 INPUT s$
140 LET e$=REPEAT$("1234",1)  ! 4�o�C�g�m��
150 LET a=kaiseki(s$,e$)
160 IF ORD(e$(1:1))=0 THEN
170    PRINT a
180 ELSE
190    PRINT "error";ORD(e$(1:1))
200 END IF
210 END



��@Mersenne Twister

�R�{�G�����ɂ��쐬���ꂽ Windows��ŗ��p�ł���Mersenne Twister�@�ɂ��[�������񐶐����[�`���B
�z�[���y�[�W�� Visual BASIC�p�̐錾�Ⴊ����̂ŁC�@�B�I�ɖ|�󂷂邾���ŗ��p�ł���B

100 DECLARE EXTERNAL FUNCTION random
110 DECLARE EXTERNAL SUB randomize
120 CALL randomize(567)
130 FOR i=1 TO 100
140    PRINT USING "#.###############": random
150 NEXT i
160 END
170 EXTERNAL FUNCTION random 
180 ASSIGN "libMT.DLL" ,"genrand" , FPU
190 END FUNCTION 
200 EXTERNAL SUB randomize(seed)
210 ASSIGN "libMT.DLL", "sgenrand"
220 END SUB

��@Mersenne Twister DLL��

����DLL�ɂ�VB�p�̃T���v�����t������̂ŁC�@�B�I�ɖ|�󂷂�Ύg����B
���̃��C�u�����ɂ͑S����4�‚�DLL���܂܂�邪�C���̂����Cmt19937m.dll�́C��Ɠ��l�Ɏg����B

100 DECLARE EXTERNAL FUNCTION random
110 DECLARE EXTERNAL SUB randomize
120 CALL randomize(4357)
130 FOR i=1 TO 100
140    PRINT USING "#.###############": random
150 NEXT i
160 END
170 EXTERNAL FUNCTION random 
180 ASSIGN "mt19937m.dll" ,"genrandm" ,FPU
190 END FUNCTION 
200 EXTERNAL SUB randomize(seed)
210 ASSIGN "mt19937m.dll","sgenrandm"
220 END SUB


mt19937ar.dll�̏ꍇ�͎��̂悤�ɂȂ�B
�s�蒷�����z��ւ̎Q�ƈ�����v������init_by_array�͕�����ϐ��������ɂ��ė��p����B

100 DECLARE EXTERNAL FUNCTION genrand_real2, genrand_int32
110 DECLARE EXTERNAL SUB  init_by_array, init_genrand
120 LET init_key$=REPEAT$(CHR$(0),16)                               ! DIM init_key(3) As Long
130 LET init_key$( 1: 2)=CHR$(BVAL("23",16)) & CHR$(BVAL("01",16))  ! init_key(0) = &H123
140 LET init_key$( 5: 6)=CHR$(BVAL("34",16)) & CHR$(BVAL("02",16))  ! init_key(1) = &H234
150 LET init_key$( 9:10)=CHR$(BVAL("45",16)) & CHR$(BVAL("03",16))  ! init_key(2) = &H345
160 LET init_key$(13:14)=CHR$(BVAL("56",16)) & CHR$(BVAL("04",16))  ! init_key(3) = &H456
170 CALL init_by_array(init_key$, 4)                                ! init_by_array init_key(0), 4
180 ! CALL init_genrand (4357)                                      ! 'init_genrand (4357)
190 FOR j = 1 TO 100
200    PRINT USING "#.###############": genrand_real2
210 NEXT j
220 END
230 
1000 ! Public Declare Function genrand_real2 Lib "mt19937ar" () As Double
1010 EXTERNAL FUNCTION genrand_real2
1020 ASSIGN "mt19937ar.dll", "genrand_real2" ,FPU
1030 END FUNCTION
1040 
1100 ! Public Declare Function genrand_int32 Lib "mt19937ar" () As Long
1110 EXTERNAL FUNCTION genrand_int32
1120 ASSIGN "mt19937ar.dll" , "genrand_int32"
1130 END FUNCTION
1140 
1200 ! Public Declare Sub init_by_array Lib "mt19937ar" (ByRef init_key As Long, ByVal key_length As Long)
1210 EXTERNAL SUB init_by_array (init_key$, key_length)
1220 ASSIGN "mt19937ar.dll", "init_by_array" 
1230 END SUB
1240 
1300 ! Public Declare Sub init_genrand Lib "mt19937ar" (ByVal seed As Long)
1310 EXTERNAL SUB init_genrand(seed)
1320 ASSIGN "mt19937ar.dll", "init_genrand" 
1330 END SUB


���⑫��
�@�@�\��RND��Full BASIC�̗\���Ȃ̂ŁC�����̖��O��RND�ɕς��Ďg�����Ƃ͂ł��܂��񂪁C����ȊO�ł���΁CRANDOM�ȂǁC�K�X�C�ʂ̖��O�ɕς��Ďg�����Ƃ��”\�ł��B

��Note��
DLL�����[�h�ł��Ȃ��G���[�ɂȂ�Ƃ��́CDLL���t���p�X���Ŏw�肷�邩�C�v���O������DLL������̂Ɠ����t�H���_�ɕۑ����Ă�����s���Ă��������B



�߂��@�@�@�@DLL�����삷��

inserted by FC2 system