code: def add_function_def(self, name, args, is_scalar_output):
      return_type = (
          f"{self.scalar_type}{'' if is_scalar_output else '()'}"
      )
  
      func_args = ", ".join(
          [
              f"{'ByRef' if is_vector else 'ByVal'} {n}"
              f"{'()' if is_vector else ''} As {self.scalar_type}"
              for is_vector, n in args
          ]
      )
      function_def = f"Function {name}({func_args}) As {return_type}"
      self.add_code_line(function_def)
      self.increase_indent()
  
file_path: m2cgen/m2cgen/interpreters/visual_basic/code_generator.py
imports: from contextlib import contextmanager
  from m2cgen.ast import CompOpType
  from m2cgen.interpreters.code_generator import CodeTemplate, ImperativeCodeGenerator
label_desc: Use image node_id 4 for calling the VisualBasicCodeGenerator obj's underlying member method code with example usage: obj.add_function_def(name, args, is_scalar_output) without return types