Не удается связать MWArray.dll с F # Interactive - PullRequest
1 голос
/ 14 декабря 2011

Я создал библиотеку .Net, используя MATLAB .Net Builder . Мне удалось без проблем использовать его в C #, но сейчас я пытаюсь выполнить некоторые тесты, используя быструю оболочку F #, созданную в F # Interactive.

Дело в том, что я не могу использовать класс MWArray в F # Interactive.

Мне удалось сослаться на DLL с помощью команды #r, но я не могу найти домен MathWorks при использовании intellisense после команды open.

Кроме того, если я запускаю свой код, я получаю следующую ошибку, когда поток встречает MWArray:

Привязка сеанса к «C: \ Program Files \ mypath \ bin \ Debug \ MWArray.dll» ...

с последующим

ошибка FS0193: внутренняя ошибка: не удалось загрузить файл или сборку 'file: /// C: \ Program Files \ mypath \ bin \ Debug \ MWArray.dll' или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом. System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'MWArray, версия = 2.11.0.0, культура = нейтральная, PublicKeyToken = e1d84a0da19db86f' или одна из ее зависимостей. Система не может найти указанный файл. Имя файла: 'MWArray, версия = 2.11.0.0, культура = нейтральная, PublicKeyToken = e1d84a0da19db86f' (...) at. $ FSI_0009.main @ () в C: \ Program Files \ mypath \ ScriptTest.fsx: строка 49

WRN: регистрация привязки сборки выключена. Чтобы включить ведение журнала ошибок привязки сборки, задайте для параметра реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) значение 1. Примечание. Некоторое снижение производительности связано с регистрацией ошибок привязки сборки. Чтобы отключить эту функцию, удалите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Остановлен из-за ошибки

Я действительно понятия не имею, откуда это и как решить проблему.

Кто-нибудь успешно использовал библиотеку MATLAB .Net из F #?

У вас есть предложение помочь мне решить мою проблему?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Я не знаком с взаимодействием MatLab и .NET, но вы проверили архитектуру?Другими словами, убедитесь, что вы не пытаетесь загрузить 64-битную DLL в 32-битный процесс или наоборот.Кроме того, если вы загружаете управляемую сборку, которая выполняет вызовы P / Invoke для собственной сборки, то эта собственная DLL должна находиться в каталоге, из которого выполняется текущий сеанс FSI.Вы можете проверить и установить это значение с помощью свойства CurrentDirectory класса System.Environment.

0 голосов
/ 01 марта 2014

Я не уверен насчет F # -интерактивности, но мне только что удалось создать очень простое консольное приложение F # 3.0, которое использует MWArray.dll и функцию matlab, которую я скомпилировал с помощью конструктора matlab NE…

open makesquare
open MathWorks.MATLAB.NET.Arrays
[<assembly: MathWorks.MATLAB.NET.Utility.MWMCROption("-nojit")>] 
do()

[<EntryPoint>]
let main argv = 
    let stuff = new MLTestClass()
    let numArray = new MWNumericArray(5)
    let res = stuff.makesquare(1, numArray)
    let res_val = res.GetValue(0)
    printfn "%A" res_val
    System.Console.ReadKey()
    0 // return an integer exit code

Функция makequare, это просто простая функция, сделанная в этом уроке http://www.mathworks.se/help/dotnetbuilder/ug/create-a-net-component-from-matlab-code.html

Для аналогичного решения в C # с .net 4. +: используйте .net 2.0 dll вПроект .net 4.5 (vshost падает при отладке)

...