Переносим алгоритм советника в DLL - страница 3

 

"__stdcall" нужно ставить обязательно. Это без вариантов.
А чтобы компилятор не искажал имена функций нужно сделать такой def-файл:

EXPORTS
        GetDouble
        GetZero

И подключить его в опциях проекта:
Linker->Input->Module_Definition_File "MyDefFile.def"

 

 

Пробовал в VC++ директиву __cdecl . При таком объявлении функций

extern "C" double __declspec(dllexport) __cdecl GetDouble(double val)
extern "C" double __declspec(dllexport) __cdecl GetZero()


их экспортируемые имена не меняются. Однако, вызов GetZero срабатывает нормально, а GetDouble крашит и закрывает терминал. Проблема передачи параметров функции. Как решить проблему - не ясно.

 
Ko1dun:

И подключить его в опциях проекта:
Linker->Input->Module_Definition_File "MyDefFile.def"


Не вижу я этого в VC++ 2010
 
andreybs:

Не вижу я этого в VC++ 2010

Ну извини, у меня 2008 студия.

Попробуй просто включить файл в проект.

 
andreybs:

Не вижу я этого в VC++ 2010

Нашел. Вставил. DLL не компилируется

1>D:\Forex\TendAnalyzer\Debug\TendAnalyzer.lib : fatal error LNK1120: 1 неразрешенных внешних элементов

Наверное, как то по другому нужно его подключать.
 

Какое-то имя функции в def-файле не соответствует имени в cpp-файле.

 

УРА!

добавил в линкер в явном виде /DEF:"путь до .def файла" и все получилось! Имена не искажаются компилятором при экспорте и в терминале все работает!


Ko1dun, спасибо!

 
Ko1dun, спасибо!


На здоровье.

 
andreybs:

УРА!

добавил в линкер в явном виде /DEF:"путь до .def файла" и все получилось! Имена не искажаются компилятором при экспорте и в терминале все работает!


Ko1dun, спасибо!



Окончательный вариант VC проекта можете выложить?
 
alsu:

работает, потому что это единственно верное объявление. Соответственно, и вторая функция должна быть объявлена таким же образом.

А _stdcall как же?
Причина обращения: