Maple, обращение к dll

dus1970

Существует dll, успешно собранный средствами VC++; f - функция, объявленная в нем так:

__declspec(dllexport) int f(int a, int b)
{
return(a+b);
}


Пытаюсь, пребывая внутри Maple'а, выполнить команду

define_external('f',a::integer[4],b::integer[4],LIB="d:\\q\\flib.dll");


Вот сообщение об ошибке:

Error, external lookup of f: The specified procedure could not be found.


Подскажите, если кто сталкивался, как с этим бороться.

Silent

Сам такие вещи не пробовал делать, но вот что написано в книжке:
А.Матросов "Maple 6. Решение задач высшей математики и механики" .:- СПб. БХВ-Петербург, 2001
Замечание на стр 344.
"Автору, к сожалению, не удалось самостоятельно выполнить вызов внешней процедуры из-за непонятных проблем, связанных с компилятором Microsoft Visual C++ 6.0. Команда define_external вызывала компилятор С, транслировала сгенерированную Maple интерфейсную С-функцию, создавала библиотеку DLL и помещала в нее оттранслированную функцию и внешнюю процедуру Maple, но на этапе подключения ее к ядру Maple возникала непонятная ошибка, которую автору не удалось исправить."

dus1970

Спасибо...

Crash770909

>>из-за непонятных проблем, связанных с компилятором Microsoft Visual C++ 6.0.
у многих прикладных математиков руки из жопы растут - это, между прочим, известный факт :
но компилятор MSVC++ тут не при чем

livid

Можно предположить, что виновато декорирование имён. То, что у вас с коде функция называется f не значит, что из DLL она экспортируется под именем f. Там может быть нечто вроде ?@Z. Вероятно поэтому Maple, который мыслей программиста не читает, и честно ищет имя f, говорит "The specified procedure could not be found". Чтобы посмотреть, под каким именем функция экспортируется, можно натравить на Вашу DLL dumpbin. Эта утилита идёт в комплекте с MSVC, лежит в папке VC98\Bin. Делаем так: dumpbin my_cool.dll /exports и видим все экспорты. Если я не ошибся, то решением проблем станет следующее:
extern "C"{
__declspec(dllexport) int __cdecl f(int a, int b);
}
Если сделать так, то имя f в таблице экспортов так и останется f. И тогда, возможно, будет Вам счастье.

dus1970

Спасибо!
Воспользовался указанием - и смог передавать Maple'у функции без аргументов, а для передачи оных пришлось всё-таки исправлять вручную внутренний глюк Maple7.
Теперь я могу складывать целые числа внешними средствами.
Обещаю дополнить распухающий диплом благодарностью анониму-...
Оставить комментарий
Имя или ник:
Комментарий: