Top Page > C++ Builder��Ruby�̊g�����W���[�������
Ruby�̋@�\���g�����邽�߂�C/C++�Ȃǂŏ����ꂽ���C�u�������g�����W���[���ƌ����܂��BWindows�ł́A���̎��̂�DLL�ł��B
�g�����W���[���̏������́ARuby�� doc/ruby/ruby-1.6.7/README.EXT.ja �ɏڂ���������Ă��܂��BRuby/KAKASI�g�����W���[���̃y�[�W�ɂ́A�g�����W���[���̃T���v���R�[�h�Ɖ�����L���āA�𗧂��܂��B
BCB6 Pro���ɐ������܂��B�ȉ��̐����́A�u����������炤�܂����������ۂ��v�Ƃ��������ŁA�����������Ȃ̂��͕�����܂���B�����Ԉ���Ă���A�����ƊȒP�ȕ��@���L������w�E���Ă��������B
���ʂɍ��܂��B�O�̂��ߐ�������ƁA
ruby.h ���C���N���[�h���܂��B ruby.h �Ɗ֘A�w�b�_�t�@�C����Ruby�� lib/ruby/1.6/i586-mswin32 �ɗL��܂��B
mswin32-ruby16.lib ���v���W�F�N�g�ɒlj�����K�v���L��܂��Bmingw�Ńo�C�i���ł� lib �f�B���N�g���ɓ����Ă܂����A����́i�����jVC�p�Ȃ̂ŁA���̂܂܂ł͎g���܂���B�R�}���h�v�����v�g��
coff2omf mswin32-ruby16.lib mswin32-ruby16-bcb.lib
�Ƃ���BCC��Lib�t�@�C�������A������v���W�F�N�g�ɒlj����܂��傤�B���łɁARuby�� bin �f�B���N�g���� mswin32-ruby16.dll ��System�f�B���N�g���ɃR�s�[���Ă����܂��傤�B
Ruby/KAKASI�g�����W���[���Ȃǂ�����Ε�����悤�ɁA Init_dlltest �idlltest �̏��̓v���W�F�N�g���j�Ȃǂ̊����`���܂��BC++�ŏ����Ă�ꍇ�́A
extern "C"{
�@void Init_dlltest();
}
�̂悤�ɁA���錾�� extern "C"{ �c } �ň݂͂܂��B����`���͂ޕK�v�͖����ł��B���̕ӂ̊��̏������ɂ��ďڂ����� README.EXT.ja ��ǂ�ł��������B
���ʂȂ�A���� __export �� __declspec(dllexport) ��t����G�N�X�|�[�g�����I�Ȃ�ł����A���ꂾ�ƗႦ�� _Init_dlltest �̂悤�ɁA�G�N�X�|�[�g���ꂽ�����̐擪�ɃA���_�X�R�A���t�����Ⴄ��ł��ˁB�ŁA���ꂾ��Ruby�����܂��Ăяo���Ȃ��悤�ł��B�����Łu���W���[����`�t�@�C���v���Ă̂����܂��B
CODEPRELOAD MOVEABLE DISCARDABLE
DATAPRELOAD MOVEABLE SINGLE
HEAPSIZE4096
STACKSIZE1048576
EXPORTS
�@�@Init_dlltest=_Init_dlltest
����ȕ��ɏ��������̂��A dlltest.def �Ƃ��� dlltest.bpr �Ɠ����f�B���N�g���ɕۑ����܂��B�Ō�̍s���A�u������ _Init_dlltest �̊��� Init_dlltest �Ƃ������O�ŃG�N�X�|�[�g�v�ƌ����Ӗ��Ȗ�ł��ˁB�ŁA[�v���W�F�N�g]-[�I�v�V�����\�[�X�̕ҏW]��
<DEFFILE value=""/>
�Ƃ�������
<DEFFILE value="dlltest.def"/>
�ɏ��������܂��B����Ń��C�N����A Init_dlltest �Ƃ��������G�N�X�|�[�g���ꂽ dlltest.dll ���ł��܂��B eXeScope �Ȃǂ̃c�[���Ŋm�F�ł��܂��B���Ȃ݂ɁA rb_define_module_function �Ȃǂœo�^���������G�N�X�|�[�g����K�v�͖����悤�ł��B
������1�����ӓ_�BBCB6�̃o�O�Ȃ̂��A�I�v�V�����\�[�X��DEFFILE�̐ݒ�́A�v���W�F�N�g���J���Ȃ����ƃN���A����Ă��܂��܂��B���C�N����O�Ɉ�U dlltest.bpr.xml �̃^�u����ĊJ���Ȃ����ADEFFILE�̐ݒ肪�N���A����Ă���Ώ��������܂��傤�B*1
��Ruby����g��
Ruby�t�@�C����
require 'dlltest'
�Ƃ���A�Ȍ�A dlltest.dll �Œ�`�������W���[����N���X���g���܂��B dlltest.dll ��Ruby�t�@�C���Ɠ����f�B���N�g�����ASystem�f�B���N�g���ӂ�ɒu���܂��傤�B
Ruby�� require '***' ��DLL�� Init_*** ���ŁA***�̕����i�����ł�"dlltest"�j�̑�E���������Ⴄ�Ǝ��s���܂��B�������ő�����̂�������ł��B
���T���v��
--- dlltest_main.cpp ---
#include <windows.h>
#pragma hdrstop
#include <iostream>
#include <ruby.h>
using namespace std;
�@
extern "C"{
�@void Init_dlltest();
�@VALUE rb_DllTest_hello(VALUE obj);
}
�@
void Init_dlltest()
{
�@VALUE module= rb_define_module("DllTest");
�@rb_define_module_function(module, "hello", (VALUE (*)(...))rb_DllTest_hello, 0);
}
�@
VALUE rb_DllTest_hello(VALUE obj)
{
�@cout << "Hello world." << endl;
�@return INT2NUM(0);
}
�@
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
�@return 1;
}
--- test.rb ---
require 'dlltest'
DllTest.hello()
*1�@����DEFFILE�����������̂����������́A[�v���W�F�N�g]-[���C�N�t�@�C���̍쐬]�Ń��C�N�t�@�C���i��Fdlltest.mak�j���쐬���܂��傤�B�R�}���h�v�����v�g��
make -fdlltest.mak
�Ƃ���ƁA���������g�킸��DLL�����C�N�ł��܂��B���������̏ꍇ�A�t�@�C���̒lj��Ȃǂ̂��߂ɂ͎蓮�Ń��C�N�t�@�C����������K�v���L��܂��B
Gimite �s���@<gimite@mx12.freecom.ne.jp>
C++ Builder��Ruby�̊g�����W���[������� < Top Page