本を参考に作りました。でも実行すると#Error 38 in 340 (script0.hsp) 外部DLLへの呼び出しに失敗しました
と出ます。どうすればいいでしょうか。
#include "e3dhsp3.as"
             
	dim keybuf, 256	
	
	;スクリーンのサイズ
	screenw = 640 : screenh = 480
	;スクリーンの位置
	screenx = 300 : screeny = 100
	screen 0, screenw, screenh, 0, screenx, screeny
	;ウィンドウのタイトル
	title "sample"
	;デバック情報をdbg.txtに出力
	E3DEnableDbgFile
	;初期化
	E3DInit 0, -1, 0, 16, 0, scid1
	
	;フォントの作成
	E3DCreateFont 20, 10, 800, 0, 0, 0, "MS ゴシック",  fontid1
	;ライトIDの取得
	E3DCreateLight lid1
	;ライトの作成
	lightdirx1 = 0.1 : lightdiry1 = -0.1 : lightdirz1 = 0.1
	
	lightr1 = 255 : lightg1 = 255 : lightb1 = 200
	E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1
	
	;プロフェッションの作成
	proj_near = 800.0 : proj_far = 100000.0 : proj_fov = 60.0
	E3DSetProjection proj_near, proj_far, proj_fov
	
    ;音楽データを読み込みます。
	E3DLoadSound dir_cur + "\\Media\\sound\\firewind.wav",musicid(1) , 0, 1
	;効果音を読み込みます。
	E3DLoadSound dir_cur + "\\Media\\sound\\bun.wav",soundid(1), 1, 4
	E3DLoadSound dir_cur + "\\Media\\sound\\bosu.wav",soundid(2), 1, 4
	;主人公キャラデータ読み込み
	pathbuf = dir_cur + "\\Media\\Hero\\he1.sig"
	E3DSigLoad pathbuf, hsid1
    ;モーションデータを読み込む命令です。
	pathbuf = dir_cur + "\\Media\\Hero\\motion(he\\mo(he.moa"
	E3DLoadMOAFile hsid1, pathbuf, 5
    ;主人公の設定
	HP = 10
	最大HP = 10
	初期値 = 10
	必要経験値 = 初期値
	攻撃力 = 3
	Lv = 1
	取得経験値 = 10
    ;主人公の装備データを読み込みます。
	pathbuf = dir_cur + "\\Media\\item\\Sword.sig"
	E3DSigLoad pathbuf, weid1
    ;主人公モデルの座標を設定
	posx1 = 0.0 : posy1 = 210.0 : posz1 = -6000.0
	E3DSetPos hsid1, posx1, posy1, posz1
	adjustx0 = posx1 : adjusty0 = posy1 : adjustz0 = posz1
	
	;主人公モデルの向きを設定
	diry1 = 0.0
	E3DSetDir hsid1, 0, diry1, 0
	
	;主人公の座標を保存(E3DChkConfGroundで保存された座標を使用します。
	E3DSetBeforePos hsid1
	
    ;クォータニオンを作成します。
	;武器を腕にセットするときの姿勢座標取得に必要になります。
	E3DCreateQ dirQ
	
	;武器をセットするボーンのIDを取得します。
	E3DGetBoneNoByName hsid1, "buki_X-", bon1
    ;マップデータの読み込み
	E3DLoadmqoFileAsGround dir_cur + "\\Media\\Field\\Map1.mqo", 60.0 ,gid
    ;壁データの読み込み
	E3DLoadmqoFileAsGround dir_cur + "\\Media\\Field\\Wall1.mqo", 60.0, wid
	;背景データの読み込み
	E3DCreateBG scid1, dir_cur + "\\Media\\Field\\Dark.bmp", "n", 0, 0, 0, 0
	stag = 1;移動マップを指定
    敵数=3
		repeat 敵数
			pathbuf = dir_cur + "\\Media\\Enemy\\m1.sig"
			E3DSigLoad pathbuf, Enid(cnt)
			pathbuf = dir_cur + "\\Media\\Enemy\\motion(m1\\mo(m1.moa"
			E3DLoadMOAFile Enid(cnt), pathbuf, 5
			
			
			;敵モンスターモデルの座標を設定
			if cnt=0:adjustxE(cnt)=-10000.0 : adjustyE(cnt)=210.0 : adjustzE(cnt)=-18400.0
			if cnt=1:adjustxE(cnt)=0.0: adjustyE(cnt)=210.0 : adjustzE(cnt)=-10000.0
			if cnt=2:adjustxE(cnt)=10000.0 : adjustyE(cnt)=210.0 : adjustzE(cnt)=-18400.0
			E3DSetPos Enid(cnt), adjustxE(cnt), adjustyE(cnt), adjustzE(cnt)
			
			;敵モンスターモデルの向きを設定
			diry=0.0
			E3DSetDir Enid(cnt), 0, diry, 0
			E3DSetBeforePos Enid(cnt)
			
			;repeat命令で使う(cnt)を変数として用いる場合
			;小数点以下まで使うのかそうでないのか=0か=0.0のように定義していないと
			;エラーが起こります。以下のような表記をすればこのエラーは回避できます。
			eventnoE(cnt) = 0
			resultE(cnt) = 0 
			motidE(cnt) = 0
			dmpcnt(cnt) = 0
			framE(cnt) = 0
			EnDed(cnt) = 0
			Endtim(cnt) = 0
			posEndx(cnt) = 0.0
			posEndy(cnt) = 0.0
			posEndz(cnt) = 0.0
			scle(cnt) = 0.0
			EnHP(cnt) = 10
			;敵モンスター装備作成
			pathbuf = dir_cur + "\\Media\\item\\club.sig"
			E3DSigLoad pathbuf, weidE(cnt)
			;武器をセットするボーンの座標を読み込む
			E3DGetBoneNoByName Enid(cnt),"buki_X-", bonE(cnt)
		loop
	
repeat 敵数
		E3DDestroyHandlerSet Enid(cnt)
		E3DDestroyHandlerSet weidE(cnt)
		;[script9.hsp]の[Source2]がここに入ります
	loop
	
*main
	
	
	E3DGetKeyboardCnt keybuf
	if keybuf( VK_ESCAPE ) != 0 : goto *bye ; [ESC]で終了
	
	gosub *MoveChara
	gosub *MoveCamera
;ラベルを追加します。
	gosub *Setweapon
;主人公のモーションを実行します。
	E3DSetNewPoseByMOA hsid1, eventno
	;主人公のモーションの番号をmotidに、現在のフレーム数をframに代入します。
	;条件などにモーション番号や、フレーム数を用いる時に使います。
	E3DGetMotionFrameNo hsid1, motid, fram
repeat 敵数
		;主人公のモーションを実行します。
		E3DSetNewPoseByMOA Enid(cnt), eventnoE(cnt)
		;主人公のモーションの番号をmotidに、現在のフレーム数をframに代入します。
		E3DGetMotionFrameNo Enid(cnt), motidE(cnt), framE(cnt)
		
	loop
//////
	;視野内にあるかどうかを、判定します
	E3DChkInView scid1, hsid1
	
;[script4.hsp]の[Source3]がここに入ります
E3DChkInView scid1, gid
;[script5.hsp]の[Source2]がここに入ります
E3DChkInView scid1, wid
;武器を新たに表示するため、武器の視野内判定を追加します。
	E3DChkInView scid1, weid1
repeat 敵数
		E3DChkInView scid1, Enid(cnt)
		E3DChkInView scid1, weidE(cnt)
	loop
	
gosub *ChkConf ; 必ず E3DChkInViewより後で呼んでください。
gosub*ChkConf2; 必ず E3DChkInViewより後で呼んでください。
gosub*Warp
	;レンダリングを実行する前には必ずこのメソッドを呼び出し
	;レンダリングの終了時、および再度E3DBeginSceneを呼び出す前には、
	;必ず E3DEndSceneを呼び出す。
	E3DBeginScene scid1
	
	;不透明モデルの表示
	
E3DRender scid1, gid, 0
	E3DRender scid1, hsid1, 0
	
;武器を新たに表示するため、不透明部分の描画を追加します。。
	E3DRender scid1, weid1, 0
repeat 敵数
		if EnDed(cnt)<30{
			E3DRender scid1, Enid(cnt), 0
			E3DRender scid1, weidE(cnt), 0
 		}
	loop
	;半透明モデルの表示
	
E3DRender scid1, gid, 1, , , , , 1
	E3DRender scid1, hsid1, 1, , , , , 1
;武器を新たに表示するため、半透明部分の描画を追加します。
E3DRender scid1, weid1, 1, , , , , 1
repeat 敵数
		if EnDed(cnt)<30{
			E3DRender scid1, Enid(cnt), 1, , , , , 1
			E3DRender scid1, weidE(cnt), 1, , , , , 1
 		}
	loop
;ここではラベルを追加します。ラベル名を*Setsoundとします。
	gosub *Setsound
	gosub *DrawText
	E3DEndScene
	E3DPresent scid1
	
	;一秒間に表示される画像の数を設定します。
	;必ず、HSPの標準命令、”await 0”とセットで使用してください。
	E3DWaitbyFPS 60, chkfps1
	await 0
E3DSetBeforePos hsid1
if マップ移動=1:gosub *changemap
	goto *main
*bye
	;ゲームを終了します
	E3DBye
	end
*MoveChara
	
;キャラクターのモーション番号を初期化して0にします。
	;これがないと、同じモーションを延々と繰り返します。
	eventno = 0
	;モーションが初期化されると同時に移動禁止を解きます。
	;Source4の移動禁止命令をモーション番号を条件に解除します。
	if motid = 1 : 移動禁止 = 0
移動距離 = 0
	if 移動禁止 = 0{
		if keybuf( VK_LEFT ) != 0 :{
			diry1 = 90.0
			移動距離 = 100
			eventno = 1
			}
		if keybuf( VK_RIGHT ) != 0 :{
			diry1=-90.0
			移動距離=100
			eventno=1
			}
		if keybuf( VK_UP )!=0 :{
			diry1=180.0
			移動距離=100
			eventno=1
			}
		if keybuf( VK_DOWN )!=0:{
			diry1=0.0
			移動距離=100
			eventno=1
			}
		}
;[Z]で攻撃をさせる命令をします。攻撃中移動しないように
	;移動禁止も命令しておきます。
	if keybuf( 'Z' ) = 1 : eventno=2 : 移動禁止 = 1
										
E3DSetDir hsid1, 0, diry1, 0
	E3DPosForward hsid1,移動距離
;敵の行動
	repeat 敵数
		eventnoE(cnt)=0
		if EnHP(cnt)>0{
			;敵と主人公の位置から敵の動きを決める
			E3DGetPos hsid1, posx1, posy1, posz1
			E3DGetPos Enid(cnt), posx, posy, posz
			vecx = posx-posx1
			vecy = posy-posy1
			vecz = posz-posz1
			E3Dvec3length vecx,vecy,vecz,length1
			if length1>800:{
				;敵の距離が遠かったため主人公を追尾します
				eventnoE(cnt)=1
				E3DDirToTheOtherXZ Enid(cnt),hsid1
				E3DPosForward Enid(cnt),10
			}
			if length1<=800:{
				;敵の距離が近いので主人公を攻撃します
				eventnoE(cnt)=2
				;攻撃がヒットしたためダメージエフェクトを表示し、HPを減らします
				if motidE(cnt)=3 && framE(cnt)=10{
					 HP-=1:効果音2=1:画面点滅=5
 				}                   
				E3DDirToTheOtherXZ Enid(cnt),hsid1
				if length1<300:{
				;敵が主人公と重ならないようにします
				E3DPosForward Enid(cnt),-100
				}
			}
		}
		;HPが0になると死亡時のアクション時間が進行する
  		if EnHP(cnt)<1:EnDed(cnt)+=1
  		;敵を倒すと経験値がもらえるようにする。
  		if EnDed(cnt)=1:経験値+=取得経験値
  		;一定時間で敵が復活するようにする
  		if EnDed(cnt)>100:{
  			EnDed(cnt)=0
  			EnHP(cnt)=10
  			if cnt=0:posx=-10000.0: posy=210.0: posz=-18400.0
			if cnt=1:posx=-10000.0: posy=210.0: posz=1000.0
			if cnt=2:posx=10000.0: posy=210.0: posz=-18400.0
			E3DSetPos Enid(cnt), posx, posy, posz
		}
 		;ダメージ中に敵が吹き飛ぶようにする
 		if Endtim(cnt)>0 && Endtim(cnt)<6: E3DSeparateFrom Enid(cnt),hsid1,200
 		;このタイミングで効果音をならす
 		if Endtim(cnt)=10:効果音2=1
 		;ここでダメージ時間を経過させる。
 		if Endtim(cnt)>0:Endtim(cnt)-=1
	loop
	;レベルアップの設定
	if 経験値 > 必要経験値{
		経験値 = 必要経験値
		攻撃力+=1
		HP=10+Lv*3
		Lv+=1
		repeat Lv
		R=Lv*経験値
		loop
		必要経験値 = 初期値+R
		}
	return
	
*Setsound
	;BGMを繰り返す命令をします。ゲームのバックサウンドなどに使用します。
	;音楽が演奏されていない場合playingに0が入ります。
	E3DIsSoundPlaying musicid(1), playing
	;演奏中でない場合
	if playing = 0 : E3DPlaySound musicid(1), 1
	
	;モーション番号3の5フレーム目を条件に音を鳴らします。
	if motid = 3 && fram=5 : 効果音1= 1
	;実際に音を鳴らします。
	if 効果音1= 1 {
		
		E3DPlaySound Soundid(1), 0
		効果音1=0
	}
	if 効果音2= 1 {
		
		E3DPlaySound Soundid(2), 0
		効果音2=0
	}
	return
;追加ラベルの内容を書き込みます。
*Setweapon
	;まず武器を装備する手のボーンの座標を取得
	E3DGetBonePos hsid1,bon1,1,motid,fram,bposx,bposy,bposz
	;武器を手のボーンの座標にセット
	E3DSetPos weid1,bposx,bposy,bposz
	;武器を装備する手のボーンの姿勢をクォータニオン形式で取得
	E3DGetBoneQ hsid1, bon1, motid, fram, 2, dirQ
	;クォータニオンにコピーされた手のボーンの姿勢の座標を、武器の姿勢の座標にセットします。
	E3DSetDirQ2 weid1, dirQ
repeat 敵数
		E3DDestroyHandlerSet Enid(cnt)
		E3DDestroyHandlerSet weidE(cnt)
		;[script9.hsp]の[Source2]がここに入ります
	loop
	return
*changemap
	;データ削除(削除しないとマップ移動のたびに
	;同じデータが重ねて読み込まれます。主人公データは最初しか読み込まないので削除しません。
	E3DDestroyBG
	E3DDestroyHandlerSet gid
	E3DDestroyHandlerSet wid
	
;敵を攻撃した時の当り判定
	repeat 敵数
		if motid=3 && fram=10 && EnHP(cnt)>0:{
			E3DGetPos hsid1, posx1, posy1, posz1
			E3DPosForward hsid1,500 ;主人公を500前進させる
			E3DGetPos hsid1, posxA, posyA, poszA;主人公を1000先の座標を取得
			E3DSetPos hsid1, posx1, posy1, posz1 ;主人公の位置をもとにもどす
			E3DGetPos Enid(cnt), posx, posy, posz;敵位置を取得
			vecx = posx-posxA
			vecy = posy-posyA
			vecz = posz-poszA
			;この命令で主人公の500先の位置から周囲1000以内に
			;敵がいるかどうかを判別することができる。
			E3Dvec3length vecx,vecy,vecz,length1
			if length1<1000:{
				;ここで敵のダメージアクション時間と、ビルボードを表示する場所を取得しておく
				Endtim(cnt)=20
				;乱数をセットする
				range=5
				E3DRand range, rand
				rand-=2
				DM = 攻撃力+rand
				EnHP(cnt)-=DM
				posEndx(cnt)=posx:posEndy(cnt)= posy:posEndz(cnt)= posz
			}
		}
	
	loop
	マップ移動=0
	if stag=2{
repeat 敵数
		E3DChkConfGround Enid(cnt), gid, mode, diffmaxy.0, -1.0, resultE(cnt), adjustxE(cnt), adjustyE(cnt), adjustzE(cnt), nx0, ny0, nz0
		if ( resultE(cnt) != 0 ){
			E3DSetPos Enid(cnt), adjustxE(cnt), adjustyE(cnt), adjustzE(cnt)
		}
	loop
		;マップデータの読み込み
		E3DLoadmqoFileAsGround dir_cur + "\\Media\\Field\\Map2.mqo",60.0 ,gid,0
		;壁データの読み込み
		E3DLoadmqoFileAsGround dir_cur + "\\Media\\Field\\Wall2.mqo",60.0 ,wid,0
		;背景データ読み込み
		E3DCreateBG scid1, dir_cur + "\\Media\\Field\\Dark.bmp", "n", 0, 0, 1, 10
		;主人公をマップに配置
		
		E3DSetPos hsid1, posx1, posy1, posz1
		adjustx0=posx1:adjusty0=posy1:adjustz0=posz1
		E3DSetBeforePos hsid1
	}
	if stag=1{
		敵数=0
		;マップデータの読み込み
		E3DLoadmqoFileAsGround dir_cur + "\\Media\\Field\\Map1.mqo",60.0 ,gid,0
		;壁データの読み込み
		E3DLoadmqoFileAsGround dir_cur + "\\Media\\Field\\Wall1.mqo",60.0 ,wid,0
		;背景データ読み込み
		E3DCreateBG scid1, dir_cur + "\\Media\\Field\\Dark.bmp", "n", 0, 0, 1, 10
		
		E3DSetPos hsid1, posx1, posy1, posz1
		adjustx0=posx1:adjusty0=posy1:adjustz0=posz1
		E3DSetBeforePos hsid1
		goto*main
	}
	return
*MoveCamera	
	;カメラを作成
	;主人公の座標をカメラ座標とカメラの注視点にセットして
	;カメラ座標を微調整し整ます。
	E3DGetPos hsid1, saveposx, saveposy, saveposz
	
	backposx = saveposx
	backposy = saveposy + 5000;カメラの位置をY座標+5000増加
	backposz = saveposz - 7000;カメラの位置をZ座標7000減少
	;カメラの位置を設定
	E3DSetCameraPos backposx, backposy , backposz
	;カメラの注視点を設定
	E3DSetCameraTarget saveposx, saveposy , saveposz, 0.0, 1.0, 0.0
	return
*ChkConf
;敵を攻撃した時の当り判定
	repeat 敵数
		if motid=3 && fram=10 && EnHP(cnt)>0:{
			E3DGetPos hsid1, posx1, posy1, posz1
			E3DPosForward hsid1,500 ;主人公を500前進させる
			E3DGetPos hsid1, posxA, posyA, poszA;主人公を1000先の座標を取得
			E3DSetPos hsid1, posx1, posy1, posz1 ;主人公の位置をもとにもどす
			E3DGetPos Enid(cnt), posx, posy, posz;敵位置を取得
			vecx = posx-posxA
			vecy = posy-posyA
			vecz = posz-poszA
			;この命令で主人公の500先の位置から周囲1000以内に
			;敵がいるかどうかを判別することができる。
			E3Dvec3length vecx,vecy,vecz,length1
			if length1<1000:{
				;ここで敵のダメージアクション時間と、ビルボードを表示する場所を取得しておく
				Endtim(cnt)=20
				;乱数をセットする
				range=5
				E3DRand range, rand
				rand-=2
				DM = 攻撃力+rand
				EnHP(cnt)-=DM
				posEndx(cnt)=posx:posEndy(cnt)= posy:posEndz(cnt)= posz
			}
		}
	
	loop
	;地面の当り判定
	;キャラクターが地面を這うように移動させる命令です。
	mode=1
	diffmaxy=300.0
	
	E3DChkConfGround hsid1, gid, mode, diffmaxy, -1.0, result0, adjustx0, adjusty0, adjustz0, nx0, ny0, nz0
	  
	if ( result0 != 0 ){
		E3DSetPos hsid1, adjustx0, adjusty0, adjustz0
	}
repeat 敵数
		E3DChkConfGround Enid(cnt), gid, mode, diffmaxy.0, -1.0, resultE(cnt), adjustxE(cnt), adjustyE(cnt), adjustzE(cnt), nx0, ny0, nz0
		if ( resultE(cnt) != 0 ){
			E3DSetPos Enid(cnt), adjustxE(cnt), adjustyE(cnt), adjustzE(cnt)
		}
	loop
	return
*ChkConf2
	; 壁とキャラクタのあたり判定
	;キャラクターを壁で跳ね返らせる命令です。
	resultwall = 0
	E3DChkConfWall hsid1, wid, 50, resultwall, adjustx1, adjusty1, adjustz1, nx1, ny1, nz1
	
	if resultwall != 0{
		E3DSetPos hsid1, adjustx1, adjusty1, adjustz1
	}
		
		
	return
*Warp
;ワープポイントの設定
		if stag=1 && adjustz1<-14500{
			マップ移動=1 : stag = 2 : posx1=0.0: posy1=100.0: posz1=-1000.0
		}
		if stag=2 && adjustz1>5000{
			マップ移動=1 : stag = 1 : posx1=0: posy1=100: posz1=-11000
		}
if HP < 1 :	マップ移動=1 : stag = 1 : HP = 最大HP : posx1=0: posy1=100: posz1=-6800
		
	return
	
*DrawText	
	;文字を表示させる命令です
	textposx=10: textposy=10
	strchk="chkfps1:"+chkfps1
	E3DDrawTextByFontID scid1,fontid1,textposx, textposy,strchk,1000,255,255,255
	
	
	
	
	
	return


