Назначение: Подключение старого (неуправляемого) рабочего численного кода (C, C++, Pascal, Fortran 95/2003) к SMath Studio через интерфейс Mathcad User EFI.
Характеристики интерфейса:
1. Поддерживаемые типы:
- комплексное число (double);
- комплексная матрица (double);
- строка (ASCIIZ);
2. Поддержка исключений (HRESULT) при помощи таблицы сообщений об ошибках.
3. Одна выходная переменная и от 1 до 10 входных переменных.
Особенности:
1.
Это дополнение работает только в 32-разрядных Windows (*)! Это связано с тем, что нельзя просто так вызвать 32-разрядный код из 64-разрядной системы.
2. Создаваемая пользовательская библиотека является вещью в себе, т.е. функциям не доступны средства математической системы (SMath Studio, Mathcad). Другими словами, дополнение не предоставляет пользовательской библиотеке доступ к средствам (функциям) математической программы.
3. Код в неуправляемом пространстве Windows работает в разы быстрее, чем его аналог в DotNet.
4. Среда Microsoft Visual Studio поддерживает отладку кода одновременно в управляемом и неуправляемом пространстве, поэтому нет каких-либо ограничений на создание такого рода библиотек (под Windows).
5. Вложенные массивы не поддерживаются (т.к. недокументированы и работают только в Mathcad 11.x).
(*) - для 64-разрядной версии Windows нужно использовать 32-разрядную версию запускаемого файла программы, который можно найти
тут.
Примеры пользовательских библиотек, использующих EFI:
1. На C (С++):
test2. На OPascal (Delphi7):
NumericalRecipesPascal3. На ассемблере (RadAsm):
test2 (не завершён)
4. На фортране (IVFC XE 12):
TestFortran, тема:
Плагин на фортранеПримечание: Новый код нужно писать уже в управляемой среде .Net (C#, C++/CLI, VB.Net).
Доброго, уважаемые форумчане.Начал тут писать плагин для подключения маткадовских библиотек. Писать одновременно на двух языках трудновато.
Давно на С++ не программил, так что ждите плагин не скоро... забыл даже как классы описываются. Короче, отстал от жизни как всегда.
Технология пока видится очень простой. Я создал сборку из двух проектов. Один из них - это mcaduser.dll (C++, Win32API), а второй - непостредственно сам плагин - efi.dll (C#, .Net). В папке дополнений SMath Studio создаётся папка UserEFI и в неё кидаются все маткадовские пользовательские библиотеки, а также сам mcaduser.dll.
В mcaduser.dll я напишу специальный менеджер, который будет работать на две стороны: подключать библиотеки и выдавать информацию о них наверх в SMath. Тут дело тёмное, маршаллинг этот... и ещё говорят стало проще программировать.
Вопрос у меня такой. Может кто в курсе как в C# осуществляется динамический вызов функции из неуправляемой dll? Т.е. без DllImport.
Отредактировано пользователем 13 апреля 2014 г. 19:22:10(UTC)
| Причина: Не указана