Как я могу зарегистрировать два dll: s в одном и том же макросе, используя regasm в скрипте nsis? - PullRequest
0 голосов
/ 25 августа 2011

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

! 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} \ $ {исполняемый файл}" /codebase / tlb: "$ INSTDIR \ $ {APP_NAME_COMPACT} \ $ {typeLib}" / silent '

Как я могу переместить этот ярлык (и u_inst_) за пределы макроса, чтобы я мог использовать его более одного раза?

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

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

1 Ответ

0 голосов
/ 26 августа 2011

Одно из решений - сделать этикетку уникальной с префиксом:

!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
...