На самом деле я не говорил, что это будет полезно, поэтому мои предостережения касаются других эффектов и вопросов, почему он вообще хотел это сделать.
ел бы простой пример экспорта функции из 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.