Calling dll's with full paths is sometimes required, and the () problem really becomes a issue on x64 where $programfiles32 contains (x86), see bug#1616267 (http://sourceforge.net/tracker/?func=detail&group_id=22049&atid=373085&aid=1616267) and http://forums.winamp.com/showpost.php?p=2703535&postcount=3
System readme has a sample that does System::Get "user32::MessageBox(i $HWNDPARENT, ...)" This patch does not deal with Get()'s path issue so one would have to call LoadLibrary with full path first so Get()'s GetModuleHandle call will find it for dll's not in %path%. Call seems to be limited to "::", "*()" and "*$var()" prefixes, plus the -> syntax while Get can start with "(" so it seems impossible to handle Get paths correctly?
This patch probably also fixes http://sourceforge.net/tracker/?func=detail&aid=2968727&group_id=22049&atid=373085#bug2968727. The # fix can be separated out if required, it is not really related to the () code, but they are both path issues so what the hell :)
SYSTEM_LOG_DEBUG logging for Call seemed to be broken, I added a call to SYSTEM_LOG_POST, it is part of this patch but I'm not 100% sure if it was required or if my setup is broken (Not sure if it is supposed to log "Param In 0" for calls). Feel free to remove it when merging.
The attached .nsi does some system call tests but I cannot garantee that I did not break anything.
patch v1
nsi and sample plugin
system debug log from sample script
The other alternative would be to require full paths to be quoted: system::call '"folder\plugin"::export()' This might be slightly problematic for helper macro's since they are already problematic when it comes to quotes. I'm also not sure if it would allow full path support for Get