code: def _dllEmitter(target, source, env, paramtp):
      SCons.Tool.msvc.validate_vars(env)
      extratargets = []
      extrasources = []
      dll = env.FindIxes(target, '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp)
      no_import_lib = env.get('no_import_lib', 0)
      if not dll:
          raise SCons.Errors.UserError('A shared library should have exactly one target with the suffix: %s' % env.subst('$%sSUFFIX' % paramtp))
      insert_def = env.subst("$WINDOWS_INSERT_DEF")
      if not insert_def in ['', '0', 0] and \
         not env.FindIxes(source, "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX"):
          extrasources.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX"))
      version_num, suite = SCons.Tool.msvs.msvs_parse_version(env.get('MSVS_VERSION', '6.0'))
      if version_num >= 8.0 and \
              (env.get('WINDOWS_INSERT_MANIFEST', 0) or env.get('WINDOWS_EMBED_MANIFEST', 0)):
          extratargets.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "WINDOWSSHLIBMANIFESTPREFIX", "WINDOWSSHLIBMANIFESTSUFFIX"))
      if 'PDB' in env and env['PDB']:
          pdb = env.arg2nodes('$PDB', target=target, source=source)[0]
          extratargets.append(pdb)
          target[0].attributes.pdb = pdb
      if version_num >= 11.0 and env.get('PCH', 0):
          pchobj = SCons.Util.splitext(str(env['PCH']))[0] + '.obj'
          if pchobj not in extrasources:
              extrasources.append(pchobj)
      if not no_import_lib and \
         not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"):
          extratargets.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "LIBPREFIX", "LIBSUFFIX"))
          extratargets.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "WINDOWSEXPPREFIX", "WINDOWSEXPSUFFIX"))
      return (target+extratargets, source+extrasources)