На самом деле я не говорил, что это будет полезно, поэтому мои предостережения касаются других эффектов и вопросов, почему он вообще хотел это сделать.

ел бы простой пример экспорта функции из C ++ Windows DLL.

Я хотел бы видеть заголовок, файл cpp и файл def (если это абсолютно необходимо).

Я хотел бы, чтобы экспортированное имя былонеукрашенный, Я хотел бы использовать самое стандартное соглашение о вызовах (__stdcall?). Я хотел бы использовать__declspec (dllexport) и не нужно использовать файл DEF.

Например:

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

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

Я пытаюсь избежать того, чтобы компоновщик добавил подчеркивание и / или цифры (количество байтов?) К имени.

Я в порядке, не поддерживая dllimport и dllexport, используя один и тот же заголовок. Я не хочу никакой информации об экспорте методов класса C ++, просто глобальные функции в стиле c.

ОБНОВИТЬ

Не включая соглашение о вызовах (и использование extern "C") дает мне имена экспорта, как мне нравится, но что это значит? Какое соглашение о вызовах по умолчанию я получаю, чего ожидают pinvoke (.NET), Declare (vb6) и GetProcAddress? (Я полагаю, что для GetProcAddress это будет зависеть от указателя функции, созданной вызывающей стороной).

Я хочу, чтобы эта DLL использовалась без заголовочного файла, поэтому мне не нужно много причудливых #defines, чтобы заголовок мог использоваться вызывающей стороной.

Я согласен с ответом, что я должен использовать файл DEF.