3
# DLL �̃_�C�i�~�b�N���[�h�p�c�[��
6
# �R�s�ڈȍ~ ���v���g�^�C�v
8
# ruby dllutl.rb < source
9
# �Ƃ��Ă��A���̊��� dll ����_�C�i�~�b�N���[�h���Ă����
10
# �\�[�X�������쐬���Ă����B�������A���܂蕡�G�Ȋ��v���g�^�C�v�ɂ�
11
# ���Ή��B���� () ����݁B
17
# Daisuke Aoki <dai@y7.net>
22
if args.index(",")==nil
25
temp = args.split(/,/)
31
if i =~ /\s*(.*)\s+(\S+)\s*/
33
if rest =~ /(\s*\**\s*\**\s*\**\s*\**\s*)(.*)/
45
class_name = "default_name"
46
dll_name = "default_name.dll"
47
class_name = gets.chomp
52
# if $_ =~ /(\s*[^\s]\s+\**)([^\(]+)(\(.*\))\;\s*/
53
# if $_ =~ /(\s*\S+\s+)([^\(]+)(\(.*\))\;\s*/
61
if rest =~ /\s*(.*)\s*(\(.*?\))\s*;/
64
if rest =~ /\s*(.*)\s+(\S+)\s*/
67
if rest =~ /(\s*\**\s*\**\s*\**\s*\**\s*)(.*)/
70
# printf("<%s><%s><%s>\n",part_prev,part_func,part_post)
75
funclist << [part_prev,part_func,part_post]
79
print "/***************************************************************\n"
80
printf " name: %s dll: %s \n",class_name,dll_name
81
print "***************************************************************/\n"
84
printf "extern int load_%s(void);\n",class_name
85
printf "extern void free_%s(void);\n",class_name
89
printf "typedef %s(*type_%s)%s;\n",i[0],i[1],i[2]
91
printf "\nstatic struct %s_ {\n",class_name
93
printf "\t type_%s %s;\n",i[1],i[1]
95
printf "} %s;\n\n",class_name
97
printf "static volatile HANDLE h_%s = NULL;\n\n",class_name
99
printf "void free_%s(void)
102
\t\tFreeLibrary(h_%s);
107
",class_name,class_name,class_name,class_name
109
printf "int load_%s(void)
112
\t\th_%s = LoadLibrary(\"%s\");
113
\t\tif(!h_%s) return -1;
115
",class_name,class_name,class_name,dll_name,class_name
117
printf "\t%s.%s = (type_%s)GetProcAddress(h_%s,\"%s\");\n",class_name,i[1],i[1],class_name,i[1]
118
printf "\tif(!%s.%s){ free_%s(); return -1; }\n",class_name,i[1],class_name
120
printf "\treturn 0;\n}\n\n"
126
",i[0],i[1],i[2],class_name
127
if i[0] =~ /\s*void\s*/
128
printf "\t\t%s.%s(",class_name,i[1]
130
printf "\t\treturn %s.%s(",class_name,i[1]
133
if i[2] =~ /\((.*)\)/
136
arglist = arg_ana(args)
138
print "\n@@@ BAD @@@\n"
150
if i[0] =~ /\s*void\s*/
153
printf "\t}\n\treturn (%s)0;\n",i[0]
158
print "/***************************************************************/\n"