Переносим алгоритм советника в DLL - страница 3 123 Новый комментарий [Удален] 2011.04.03 14:48 #21 "__stdcall" нужно ставить обязательно. Это без вариантов. А чтобы компилятор не искажал имена функций нужно сделать такой def-файл: EXPORTS GetDouble GetZero И подключить его в опциях проекта: Linker->Input->Module_Definition_File "MyDefFile.def" andreybs 2011.04.03 14:48 #22 Пробовал в VC++ директиву __cdecl . При таком объявлении функций extern "C" double __declspec(dllexport) __cdecl GetDouble(double val) extern "C" double __declspec(dllexport) __cdecl GetZero() их экспортируемые имена не меняются. Однако, вызов GetZero срабатывает нормально, а GetDouble крашит и закрывает терминал. Проблема передачи параметров функции. Как решить проблему - не ясно. Отладка прог MetaTrader 4 Пример передачи массива на Помогите разобраться в проблеме andreybs 2011.04.03 14:54 #23 Ko1dun: И подключить его в опциях проекта: Linker->Input->Module_Definition_File "MyDefFile.def" Не вижу я этого в VC++ 2010 [Удален] 2011.04.03 14:59 #24 andreybs: Не вижу я этого в VC++ 2010 Ну извини, у меня 2008 студия. Попробуй просто включить файл в проект. andreybs 2011.04.03 15:01 #25 andreybs: Не вижу я этого в VC++ 2010 Нашел. Вставил. DLL не компилируется 1>D:\Forex\TendAnalyzer\Debug\TendAnalyzer.lib : fatal error LNK1120: 1 неразрешенных внешних элементов Наверное, как то по другому нужно его подключать. [Удален] 2011.04.03 15:07 #26 Какое-то имя функции в def-файле не соответствует имени в cpp-файле. andreybs 2011.04.03 15:13 #27 УРА! добавил в линкер в явном виде /DEF:"путь до .def файла" и все получилось! Имена не искажаются компилятором при экспорте и в терминале все работает! Ko1dun, спасибо! [Удален] 2011.04.03 15:15 #28 Ko1dun, спасибо! На здоровье. Vladimir Khlystov 2011.09.23 09:11 #29 andreybs: УРА! добавил в линкер в явном виде /DEF:"путь до .def файла" и все получилось! Имена не искажаются компилятором при экспорте и в терминале все работает! Ko1dun, спасибо! Окончательный вариант VC проекта можете выложить? TheXpert 2011.09.23 13:38 #30 alsu: работает, потому что это единственно верное объявление. Соответственно, и вторая функция должна быть объявлена таким же образом. А _stdcall как же? 123 Новый комментарий
"__stdcall" нужно ставить обязательно. Это без вариантов.
А чтобы компилятор не искажал имена функций нужно сделать такой def-файл:
И подключить его в опциях проекта:
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 крашит и закрывает терминал. Проблема передачи параметров функции. Как решить проблему - не ясно.
И подключить его в опциях проекта:
Linker->Input->Module_Definition_File "MyDefFile.def"
Не вижу я этого в VC++ 2010
Не вижу я этого в VC++ 2010
Ну извини, у меня 2008 студия.
Попробуй просто включить файл в проект.
Не вижу я этого в VC++ 2010
Нашел. Вставил. DLL не компилируется
1>D:\Forex\TendAnalyzer\Debug\TendAnalyzer.lib : fatal error LNK1120: 1 неразрешенных внешних элементов
Наверное, как то по другому нужно его подключать.
Какое-то имя функции в def-файле не соответствует имени в cpp-файле.
УРА!
добавил в линкер в явном виде /DEF:"путь до .def файла" и все получилось! Имена не искажаются компилятором при экспорте и в терминале все работает!
Ko1dun, спасибо!
На здоровье.
УРА!
добавил в линкер в явном виде /DEF:"путь до .def файла" и все получилось! Имена не искажаются компилятором при экспорте и в терминале все работает!
Ko1dun, спасибо!
Окончательный вариант VC проекта можете выложить?
работает, потому что это единственно верное объявление. Соответственно, и вторая функция должна быть объявлена таким же образом.