I am in the situation of taking ownership of software not developed by myself, and make the whole thing buildable through scripts, both on 32 bit and 64 bit platforms.
Among the files part of the build is a NSIS plugin dll whose an existing 32 bits version works fine (makeNSIS builds the nsi script without problem, and the generated installer works fine).
When I recompile the plugin dll however, makeNSIS complains about the first call to the plugin dll function, saying it is an "Invalid command". Whereas this is usually due to a wrong plugin directory, this is definitively because of the dll itself in my case, as replacing the dll by the old one make the thing work.
So my question is: what could lead makeNSIS to say "invalid command" when the dll is found? Some compilation options? a DLL format issue?
Checking with previous versions of the sources, I cannot see differences in them. The only differences are that I'm using VC++ 2010 to compile (instead of 2008) and that I'm compiling on a Win7 64 bits platform (but the problem arises both in compiling a Win32 or x64 configuration).
A last clue : when looking at the exports (using dumpbin) on the existing dll that is accepted, i can see:
00000000 characteristicsWhereas when looking at the newly compiled version, I can see a slight difference in the exported names ("name = _name", what does it mean?):
4BC6D78A time date stamp Thu Apr 15 11:08:26 2010
0.00 version
1 ordinal base
4 number of functions
4 number of names
ordinal hint RVA name
1 0 0000F390 BrowserRunning
2 1 0000F530 CheckSerial
3 2 0000F1E0 KillProc
4 3 0000F3F0 SHA1
Summary
3000 .data
3000 .rdata
2000 .reloc
1000 .rsrc
F000 .text
00000000 characteristicsThank you for your help.
4CC99565 time date stamp Thu Oct 28 17:23:17 2010
0.00 version
1 ordinal base
4 number of functions
4 number of names
ordinal hint RVA name
1 0 00001170 BrowserRunning = _BrowserRunning
2 1 00001240 CheckSerial = _CheckSerial
3 2 00001A00 KillProc = _KillProc
4 3 00001000 SHA1 = _SHA1
Summary
3000 .data
4000 .rdata
2000 .reloc
1000 .rsrc
E000 .text