Как я могу зарегистрировать две dll: с одним и тем же макросом, используя regasm в сценарии nsis?

Я пытаюсь зарегистрировать две dll: с помощью макроса, который принимает следующие параметры:

!macro RegisterWithRegAsm флаг исполняемого файла typeLib

Я вызываю макрос так:

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

Проблема в том, что я могу запустить макрос только один раз, потому что во второй раз 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_) за пределы макроса, чтобы использовать ее более одного раза?

Кто-нибудь знает хороший сайт для справки? Я просмотрел веб-страницу nsis, но не могу найти ссылки на обработку нескольких dll.

Спасибо за любые идеи!


person kakka47    schedule 25.08.2011    source источник


Ответы (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

Или, если вы создаете служебную функцию, которая будет вызываться во многих местах, обычно лучше создать функцию. Вспомогательный макрос CallArtificialFunction в util.nsh позволяет легко превратить макрос в функцию.

!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
person Anders    schedule 25.08.2011
comment
Я изменил его на функцию, так как хочу использовать его много раз. Спасибо за подробное объяснение! - person kakka47; 26.08.2011