2012-05-03 29 views
1

NSISスクリプト言語では、マクロ内からグローバル変数にアクセスするとエラーが発生します。マクロ内からグローバル変数を設定

私の変数installDirectoryは本当にグローバルですか?変数installDirectoryをマクロまたは関数内から設定するにはどうしたらいいですか?

var installDirectory 

!macro IdentifyDir 
    IfFileExists C:\test\9.00\ Version9 AbortInstall 

    Version9: 
     $installDirectory "C:\test\9.00\" 
    AbortInstall: 
     Abort 
!macroend 

はまた、マクロ& /または機能は、(私はプッシュ/ポップを使用するか、SHD)NSISに値を返すことができますか?

!macro IdentifyDir 
    IfFileExists C:\test\9.00\ Version9 AbortInstall 

    Version9: 
     return "C:\test\9.00\" 
    AbortInstall: 
     Abort 
!macroend 

var installDir !insertmacro IdentifyDir # is that valid? 
+2

このタグはなぜ[アセンブリ]ですか? – Job

答えて

1

二つの問題があります。

  • 変数を割り当てるためには、あなたは、1つの割り当て命令を欠場。文字列変数のためにあなたはStrCpyを使用することができます:StrCpy $installDirectory "C:\test\9.00\"

  • your another question about labelsに述べたように、ラベルが実行潜水艦が、Version9ラベルにジャンプするとき、別のジャンプせず、したがって、フロー制御によって達することができる唯一のいくつかの定義されたポイントではありませんAbortInstallラベルに続くAbortステートメントに実行されます。あなたはどちらか!macroEnd文の前end_of_macro:のような別のラベルを入れて、マクロがあなたは!insertMacroはそうあなたがユニークなラベル名を選択する必要があります置くを展開されていることをことを注意してください(gotoAbortInstallラベルを追加する必要があり、そうではありませんまたは(よりエレガントな)セクションまたは機能のためのような)2つのラベルを反転:実行が停止し、第二のケースでは、マクロ

!macro IdentifyDir 
    IfFileExists C:\temp\9.00 Version9 AbortInstall 
AbortInstall: 
    Abort 
Version9: 
    StrCpy $installDirectory "C:\test\9.00\" 
!macroend 
の外側を続けるアボートの場合を

戻り値についてのご質問は$0$9$R0$R9

関連する問題