Index: BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- BasicCompiler32/Compile_CallProc.cpp	(revision 75)
+++ BasicCompiler32/Compile_CallProc.cpp	(revision 76)
@@ -32,8 +32,5 @@
 
 
-int Opcode_CallProcPtr(char *variable,char *Parameter,ProcPointer *pProcPointer,LONG_PTR *plpIndex){
-	extern HANDLE hHeap;
-	int i;
-
+bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer){
 
 	extern BOOL bDebugCompile;
@@ -49,10 +46,10 @@
 	//パラメータオブジェクトを生成
 	ParamImpl *pobj_parameter=0;
-	pobj_parameter=new ParamImpl(Parameter);
+	pobj_parameter=new ParamImpl(lpszParms);
 
 	//エラーチェック
 	if( !pobj_parameter->ErrorCheck(variable,pProcPointer->Params() ) ){
 		//パラメータにエラーがあるときは処理を終える
-		return pProcPointer->ReturnType().GetBasicType();
+		return false;
 	}
 
@@ -69,6 +66,5 @@
 	////////////////////////
 	RELATIVE_VAR RelativeVar;
-	LONG_PTR lp;
-	GetVarOffsetReadOnly(variable,&i,&RelativeVar,&lp);
+	GetVarOffsetReadOnly(variable,&RelativeVar,Type());
 	SetVarPtrToEax(&RelativeVar);
 
@@ -89,10 +85,8 @@
 	delete pobj_parameter;
 
-	if(plpIndex) *plpIndex=pProcPointer->ReturnType().GetIndex();
-
-	return pProcPointer->ReturnType().GetBasicType();
+	return true;
 }
 
-void Opcode_CallProc(const char *Parameter,UserProc *pUserProc,DWORD dwFlags,char *ObjectName,int RefType){
+bool Opcode_CallProc(const char *Parameter,UserProc *pUserProc,DWORD dwFlags,const char *ObjectName,int RefType){
 	int i2;
 
@@ -100,13 +94,13 @@
 		if( lstrcmpi( pUserProc->GetName().c_str(), "Print" ) == 0 ){
 			Opcode_Print(Parameter,0);
-			return;
+			return true;
 		}
 		if( lstrcmpi( pUserProc->GetName().c_str(), "Input" ) == 0 ){
 			Opcode_Input(Parameter);
-			return;
+			return true;
 		}
 		if( lstrcmpi( pUserProc->GetName().c_str(), "Write" ) == 0 ){
 			Opcode_Print(Parameter,1);
-			return;
+			return true;
 		}
 	}
@@ -115,5 +109,5 @@
 
 	bool isStatic = false;
-	CClass *pobj_c = NULL;
+	const CClass *pobj_c = NULL;
 	CMethod *pMethod = NULL;
 	if( pUserProc->GetParentClassPtr() ){
@@ -126,6 +120,8 @@
 			else{
 				//"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
-				int type = GetVarType(ObjectName,(LONG_PTR *)&pobj_c,0);
-				if(!(NATURAL_TYPE(type)==DEF_OBJECT)){
+				Type varType;
+				GetVarType( ObjectName, varType, false );
+				pobj_c = &varType.GetClass();
+				if( NATURAL_TYPE( varType.GetBasicType() ) != DEF_OBJECT ){
 					pobj_c=pobj_DBClass->check(ObjectName);
 					if( pobj_c ){
@@ -160,5 +156,5 @@
 			if( !pMethod ){
 				SetError(300,NULL,cp);
-				return;
+				return false;
 			}
 
@@ -179,5 +175,5 @@
 				if(dwAccess==ACCESS_NON){
 					SetError(109,pUserProc->GetName(),cp);
-					return;
+					return false;
 				}
 			}
@@ -186,9 +182,9 @@
 					dwAccess==ACCESS_NON){
 					SetError(109,pUserProc->GetName(),cp);
-					return;
+					return false;
 				}
 				if(dwAccess==ACCESS_PROTECTED){
 					SetError(110,pUserProc->GetName(),cp);
-					return;
+					return false;
 				}
 			}
@@ -198,9 +194,8 @@
 			if(dwAccess==ACCESS_NON){
 				SetError(109,pUserProc->GetName(),cp);
-				return;
-			}
-		}
-	}
-
+				return false;
+			}
+		}
+	}
 
 
@@ -220,5 +215,4 @@
 
 
-
 	////////////////////////
 	// パラメータをセット
@@ -232,5 +226,5 @@
 	if( !pobj_parameter->ErrorCheck(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetSecondParmNum() ) ){
 		//パラメータにエラーがあるときは処理を終える
-		return;
+		return false;
 	}
 
@@ -278,9 +272,13 @@
 				if( pMethod->isConst ){
 					//Constアクセスが可能なメソッドの場合
-					if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return;
+					if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){
+						return false;
+					}
 				}
 				else{
 					//Constアクセスが不可能なメソッドの場合
-					if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return;
+					if( !GetVarOffsetReadWrite( ObjectName, &RelativeVar, Type() ) ){
+						return false;
+					}
 				}
 
@@ -351,10 +349,9 @@
 	//パラメータオブジェクトを破棄
 	delete pobj_parameter;
+
+	return true;
 }
 
-int Opcode_CallDllProc(char *Parameter,DllProc *pDllProc,LONG_PTR *plpIndex){
-	char *temporary;
-
-	temporary=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter)+1);
+bool Opcode_CallDllProc( const char *lpszParms, DllProc *pDllProc ){
 
 	extern BOOL bDebugCompile;
@@ -371,10 +368,10 @@
 	//パラメータオブジェクトを生成
 	ParamImpl *pobj_parameter=0;
-	pobj_parameter=new ParamImpl(Parameter);
+	pobj_parameter=new ParamImpl(lpszParms);
 
 	//エラーチェック
 	if( !pobj_parameter->ErrorCheck( pDllProc->GetName(), pDllProc->Params() ) ){
 		//パラメータにエラーがあるときは処理を終える
-		return pDllProc->ReturnType().GetBasicType();
+		return false;
 	}
 
@@ -406,8 +403,4 @@
 	delete pobj_parameter;
 
-	if(plpIndex) *plpIndex=pDllProc->ReturnType().GetIndex();
-
-	HeapDefaultFree(temporary);
-
-	return pDllProc->ReturnType().GetBasicType();
+	return true;
 }
