Скажем, пишу я (на C++) некую EXPORT.DLL, которая экспортинует некую функцию, скажем, для простоты:
void ExpFunc (long i);
Но, как мы знаем, C-компилятор на самом деле формирует "внутреннее" имя функции, добавляя спереди подчеркивание ('_'), а сзади - постфикс, в котором зашифрованы типы параметров. От постфикса, конечно, можно избавиться, указав в описании функци, что она - extern "C", но '_' все равно остается (да и по-моему, небольшой постфикс все равно тоже - типа числа, равного суммарному размеру стека, отводимого под параметры).
Но мы люди ушлые, с помощью DEF-файла указываем "красивое" внешнее имя для экспортируемой функции, примерно так:
Код: Выделить всё
EXPORTS
ExpFunc = _ExpFunc@4
Это, как говорится, присказка была.
А теперь сказка.
А как мне вызывать эту функцию из другой, написанной на C++ же программы?
Имеется в виду "статический" вызов, а не вызов через LoadLibrary / GetProcAddr.
То есть, если я опишу эту импортируемую функцию как
void ExpFunc (long i);
то компилятор же и будет искать ее в EXPORT.LIB под именем с '_' и постфиксом. А она-то проэкспортирована как ExpFunc!
Собственно, вопрос. Как (и возможно ли) при линковке функции из внешней DLL задать "экспортное" имя это функции? Например, в Delphi при созданиии юнита-переходника явно указывается имя DLL и "внешнее" имя экспортируемой функции. А в C++ такое возможно?
Заранее спасибо.