Exportar funciones desde una DLL con dllexport

Me gustaría un ejemplo simple de exportación de una función desde una DLL de Windows C ++.

Me gustaría ver el encabezado, el archivo cpp y el archivo def (si es absolutamente necesario).

Me gustaría que el nombre exportado sea sin decorar. Me gustaría usar la convención de llamadas más estándar (__stdcall?). Me gustaría el uso__ declspec (dllexport) y no tiene que usar un archivo DEF.

Por ejemplo

  //header
  extern "C"
  {
   __declspec(dllexport) int __stdcall foo(long bar);
  }

  //cpp
  int __stdcall foo(long bar)
  {
    return 0;
  }

Estoy tratando de evitar que el enlazador agregue guiones bajos y / o números (¿recuento de bytes?) Al nombre.

Estoy de acuerdo con no admitir dllimport y dllexport con el mismo encabezado. No quiero ninguna información sobre la exportación de métodos de clase C ++, solo funciones globales de estilo c.

ACTUALIZA

Sin incluir la convención de llamada (y el uso de "C" externa me da los nombres de exportación que me gustan, pero ¿qué significa eso? ¿Es la convención de llamada predeterminada que obtengo lo que pinvoke (.NET), declare (vb6) y GetProcAddress esperarían? (Supongo que para GetProcAddress dependería del puntero de función que creó la persona que llama).

Quiero que esta DLL se use sin un archivo de encabezado, por lo que realmente no necesito muchos #defines elegantes para que la persona que llama pueda usar el encabezado.

Estoy de acuerdo con una respuesta de que tengo que usar un archivo DEF.

Respuestas a la pregunta(4)

Su respuesta a la pregunta