0

これらのパラメーターを取るマクロを使用して、2 つの dll:s を登録しようとしています。

!macro RegisterWithRegAsm フラグ実行可能 typeLib

私は次のようにマクロを呼び出します。

!insertmacro RegisterWithRegAsm "" "Dll1.dll" "Dll1.tlb" !insertmacro RegisterWithRegAsm "" "Dll2.dll" "Dll2.tlb"

問題は、マクロを 1 回しか実行できないことです。2 回目には、NSIS が既にラベルを宣言していると不平を言います。

inst__: StrCpy $R1 '$R0${DOT_NET_VERSION_2_SP2}\RegAsm.exe "$INSTDIR\${APP_NAME_COMPACT}\${executable}" /codebase /tlb:"$INSTDIR\${APP_NAME_COMPACT}\${typeLib}" /静けさ'

このラベル (および u_inst_) をマクロの外に移動して、複数回使用できるようにするにはどうすればよいですか?

A参考になる良いサイトをご存知の方はいらっしゃいませんか?nsis の Web ページを見ましたが、複数の dll 処理への参照が見つかりません。

アイデアをありがとう!

4

1 に答える 1

0

1 つの解決策は、ラベルをプレフィックスで一意にすることです。

!macro UselessExample string
!define UselessExample_lbl "UselessExample_${__LINE__}" ;prefixing with the macro name is a good way to avoid conflicts
Goto ${UselessExample_lbl}pointlessjump
DetailPrint "Hello?"
${UselessExample_lbl}pointlessjump:
DetailPrint "${string}"
!undef UselessExample_lbl
!macroend

Section
!insertmacro UselessExample "Hello1"
!insertmacro UselessExample "Hello2"
SectionEnd

または、多くの場所で呼び出されるユーティリティ関数を作成する場合は、通常、関数を作成することをお勧めします。util.nsh の CallArtificialFunction は、マクロを関数に簡単に変換できるヘルパー マクロです。

!include util.nsh

!macro UselessExample string
Push "${string}"
${CallArtificialFunction} UselessExampleWorker
!macroend
!macro UselessExampleWorker
Pop $0
DetailPrint $0
!macroend

Section
!insertmacro UselessExample "Hello1"
!insertmacro UselessExample "Hello2"
SectionEnd
于 2011-08-25T22:06:00.997 に答える