AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2011, 19:34   #1  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Падает Ахапта-2009 при использовании .NET/CLRInterop/Word
Такой вот код (ниже). Ахапта падает именно при вызове функции.. Сам Word то всё делает, открывает фаил, можно закрыть сам Word (без открытия дока).
Сначала была проблема, что подавал NULL в CLRInterop неправильно, но потом нашёл "хияцк" - http://rik-ax.blogspot.com/2008/01/p...lrinterop.html
Вот не понимаю где теперь проблема.. вызов вроде правильный.. может чего забыл? Мистический `missing` то в Quit() работает...

Пробую написать интерфейс для Word/документа-оботрота через .NET/CLR

Падают все тру вызова.. сами обьекты до Open()/Add() существуют
X++:
static public void ESL_word_test(Args _args)
{
    //> Missing hijack
    System.Type                 type = System.Type::GetType("System.Reflection.Missing");
    System.Reflection.FieldInfo info = type.GetField("Value");
    System.Object               missing = info.GetValue(null);
    //< Missing hijack

    str _filename = "C:\\............dot";

    Object clrException;
    Object clrExceptionOwner;

    Microsoft.Office.Interop.Word.ApplicationClass wc;
    Microsoft.Office.Interop.Word.DocumentClass wd;
    Microsoft.Office.Interop.Word.Documents wds;
    Microsoft.Office.Interop.Word.Bookmarks wb;

    System.Object oTrue = true;
    System.Object oFalse = false;
    System.Object oFormat = Microsoft.Office.Interop.Word.WdOpenFormat::wdOpenFormatAuto;
    System.Object oDirection = Microsoft.Office.Interop.Word.WdDocumentDirection::wdLeftToRight;
    System.Object oEmptyStr = "";
    //System.Object oEncoding = Microsoft.Office.Core.MsoEncoding::msoEncodingAutoDetect;
    System.Object oFilename = _filename;
    ;

    try
    {
        wc = new Microsoft.Office.Interop.Word.ApplicationClass();
        wc.set_Visible(true);

        wds = wc.get_Documents();
        if (!wds)
            throw error("no get_Documents");

        if (1)
            wds.Add(byref missing,byref missing,byref missing, byref oTrue);

        if (0)
        wd = wds.Open(
                    byref oFilename,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing,
                    byref missing
                );

        if (0)
        wd = wds.Open(
                    byref oFilename,
                    byref oFalse,
                    byref oTrue ,
                    byref oFalse,
                    byref oEmptyStr,
                    byref oEmptyStr,
                    byref oFalse,
                    byref oEmptyStr,
                    byref oEmptyStr,
                    byref oFormat,
                    byref missing,
                    byref oFalse,
                    byref oFalse,
                    byref oDirection,
                    byref oTrue,
                    byref missing
                );
    }
    catch (Exception::CLRError)
    {
        setprefix("CLR error");
        clrException = CLRInterop::getLastException();
        if (CLRInterop::isNull(clrException) == false)
        {
            error(clrException.get_Message());
            error(clrException.get_StackTrace());

            clrExceptionOwner = clrException.get_InnerException();
            if (CLRInterop::isNull(clrExceptionOwner) == false)
            {
                error(clrExceptionOwner.get_Message());
            }
        }
    }
    catch
    {
        info("Ax stop...");
    }

    if (wc)
    {
        try
        {
            wc.Quit(byref missing, byref missing, byref missing);
        }
        catch
        {
            setprefix("CLR Word-quit error");
            clrException = CLRInterop::getLastException();
            if (CLRInterop::isNull(clrException) == false)
            {
                error(clrException.get_Message());
            }
        }
    }
}
Теги
.net, ax2009, clr interop, clrobject, office, word, баг, ошибка, ядро

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
semanticax: Dynamics AX 2009 Installation - Application Blog bot DAX Blogs 0 22.12.2010 08:11
Solutions Monkey: Migrating X++ web forms to AX 2009 EP asp.net framework Blog bot DAX Blogs 0 09.11.2010 19:05
emeadaxsupport: When browsing AX 2009 Role Centers, you get an error: An unexpected error has occurred on systems with .NET Framework v4.0 installed Blog bot DAX Blogs 1 28.07.2010 08:24
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:19.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.