Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конфликт Noesis.Javascript (и Jint) с Padeg.dll / 1 сообщений из 1, страница 1 из 1
28.02.2014, 07:03
    #38574906
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт Noesis.Javascript (и Jint) с Padeg.dll
Доброго всем дня. К несчастью мне понадобится помощь ясновидящих, потому что в полной мере объяснить проблему я не смогу.
Итак, имеется проект, полный исходный код которого вы можете взять на github .
Возникла непонятная проблема конфликта двух абсолютно не связанных друг с другом библиотек: библиотеки интерпритации кода javascript (как Noesis.Javascript, так и Jint, проверил обе) с библиотекой Плахова С.В. и Покаташкина Г.Л. Padeg.dll.

Суть проблемы в следующем:
Вызов любого импортированного метода из Padeg.dll приводит к тому, что библиотека Noesis.Javascript выдает исключение на строке создания объекта JavascriptContext с сообщением "Попытка деления на ноль" (StackTrace: "в v8.Context.New(Persistent<v8::Context>* , ExtensionConfiguration* , Handle<v8::ObjectTemplate> , Handle<v8::Value> )\r\n в Noesis.Javascript.JavascriptContext..ctor()\r\n в JSModule.JSPlug.JSRun(String script, Object& result) в D:\\Projects\\Visual Studio Projects\\activity_manager\\ScriptModule\\JScript.cs:строка 36"). Если вместо Noesis.Javascript использовать Jint, то происходит тупо зависание на запуске скрипта.

Однако(!), если порядок выполнения поменять, то все работает отлично, т.е. если сначала вызвать метод Noesis.Javascript, а потом метод Padeg.dll.

Код работы с Noises.Javascript:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        
public void JSRun(string script, out object result)
{
            //При создании JavascriptContext будет исключение, если до этого вызывали методы из Padeg.dll
            using (JavascriptContext context = new JavascriptContext())  
            {
                context.SetParameter("result", null);
                context.Run(script);
                result = context.GetParameter("result").ToString();
            }
}



Код работы с Padeg.dll:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
[DllImport("Padeg.dll", EntryPoint = "GetSex")]
private static extern Int32 decGetSex(IntPtr patronimic);

public static Gender GetGender(string patronimic)
{
            if(patronimic == null) throw new ArgumentNullException("patronimic");

            IntPtr ptr = IntPtr.Zero;
            try
            {
                ptr = StringToIntPtr(patronimic);
                 //Если тут написать "return Gender.MasculineGender" без вызова метода Padeg.dll, 
                 //то проблем с созданием JavascriptContext не возникает
                return (Gender)decGetSex(ptr);
            }
            finally
            {
                Marshal.FreeHGlobal(ptr);
            }
}



В общем, библиотеки никак не связаны, не понимаю почему так происходит и как решить проблему...

P.S.: Работа с Padeg.dll происходит через подключенную сборку(обертку) Declension.dll к плагину ConvertModule.dll. Сборка Noises.Javascript.dll подключена к плагину JSModule.dll. В свою очередь плагины ConvertModule.dll и JSModule.dll динамически загружаются методом Assembly.LoadFile в ядро программы ActivityManager.exe:
Код: c#
1.
assembly = Assembly.LoadFile(assemblyPath, AppDomain.CurrentDomain.Evidence);
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конфликт Noesis.Javascript (и Jint) с Padeg.dll / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]