"AdvanceCAD"には、関数のような観念がない・・・。
簡単なものなら構わないが、ある程度ボリュームがある物は
やっぱり無理です。
幸い "外部変数" と "マクロからマクロ呼び出し" の機能があるため
これで関数を作るしかないような。
以前、喜多技研さんに相談したときも
"そこまでやったことが無いので、わからない"
と言う回答を頂いたのですが、最近になってわかったので
記載しておきます。
配列arrはローカル変数で、一度extern宣言した外部変数
に投げ込みます。
呼び出された側のマクロで+10してreturnします。
外部変数名は一致させておく必要があり、絶対にclearしない。
配列としては宣言しなくても大丈夫なようです。
VBAのイミディエイトウィンドウやMsgBoxのような便利な物が無い為、
最後はファイルにダンプさせます。
こちらが呼び出し側マクロ。
/* AdvanceCAD_macro */ /* 外部マクロと配列のテスト MainArrTest.MAC */ clear(); /* ローカルな配列 */ arr=array(100); for (i=0;i<length(arr);i+=1) { arr[i]=i; } /* 外部な変数 */ extern gArr; gArr=arr; /* 外部マクロ呼び出し */ MACRO NEW "FuncArrTest.MAC" <CE> /* 外部マクロ処理後戻す - 戻す必要ないけど */ arr=gArr; clear();/* 外部な変数は消す */ /* ダンプ */ vdump("C:/temp/dump.txt","w",arr); /* 終わり */ echo "end";
こちらが関数代わりの外部マクロ。
/* AdvanceCAD_macro */ /* 外部マクロと配列のテスト FuncArrTest.MAC */ /* 絶対に clear しない */ /* 外部な変数 - 同じ名前で!*/ /* 配列として宣言する必要なし */ extern gArr; if(vtype(gArr) != 30) {return;} /* 配列以外は返す */ for (i=0;i<length(gArr);i+=1) { gArr[i]+=10; } /* 戻り */ return;
結果はこちら
arr=array(100); arr[0]=10; arr[1]=11; arr[2]=12; arr[3]=13; arr[4]=14; arr[5]=15; arr[6]=16; arr[7]=17; ・・・
出来ています。 少し希望の光が見えてきました。
配列は有るものの、動的配列が存在せず・・・。どうしよう。