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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.12.2008, 10:37   #1  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
C# dll в Axapta 3.0
Цитата:
Пробовал, ничего не помогает, в аксапте полученный Com объект невозможно создать, хотя регистрируется успешно, в GAC устанавливается и в реестре прописываются нужные ключи.

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Cпасибо, так получилось. Решил накидать простенький примерчик
1.Создаем в VS проект C# Class Library c именем TestNetDll.
2.Пишем простенький класс, в котором будут присутствовать два экспортируемых метода.
X++:
using System;

namespace TestNetDll
{
    public class TestClass
    {
        public static int SumInt(int a, int b)
        {
            return a + b;
        }

        public static int MultInt(int a, int b)
        {
            return a * b;
        }
    }
}
3.Компилируем проект.
4.Теперь полученную dll можно использовать в управляемых приложениях. Но нам нужно получить доступ к dll из неуправляемого приложения, а в C# нет синтаксических конструкций для подобного объявления. Зато в IL есть. Поэтому, нужно дизассемблировать полученную dll выполнив в командной строке visual studio
X++:
Ildasm c:\prodjectPath\TestNetDll.dll out:c:\prodjectPath\TestNetDll.il
5.Открываем текстовым редактором полученный файл TestNetDll.il
6.Находим метод SumInt и добавлем в него сразу после открывающей фигурной скобки следующие строки
X++:
.vtentry 1:1
.export [1] as sumInt
где, .vtentry НомерТаблицыЭкспортируемыхФункций:НомерЭкспортируемойФункции
.export [НомерЭкспортируемойФункции] as НазваниеЭкспортируемойФункции
7.В методе MultInt вставляем
X++:
.vtentry 1:2
.export [2] as sumInt
7.Сохраняем изменения.
8.Компилируем
X++:
Ilasm c:\ProjectPath\TestNetDll.il /dll /out:c:\ProjectPath\TestNetDll.dll
9.Пример использования в Axapta
X++:
static void Job(Args _args)
{
    DLL         dll;
    DLLFunction dllFunction;
    int res;
    ;
    dll = new Dll(@"c:\ProjectPath\TestNetDll.dll");
    dllFunction = new DllFunction(dll, "MultInt");
    dllFunction.arg(ExtTypes::Word, ExtTypes::Word);
    dllFunction.returns(ExtTypes::Word);
    res = dllFunction.call(5, 10);
    info(int2str(res));
}
За это сообщение автора поблагодарили: if_maks (1), belugin (5), Logger (5), Ace of Database (3), Ar (1), arhat (1).
Теги
dll, visual studio, интеграция, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: Programming against a DLL. Blog bot DAX Blogs 2 28.03.2008 12:56
склонение ФИО и использование dll библиотеки NetBus DAX: Программирование 11 23.10.2007 14:00
Client Axapta 3.0 SP4 и Linux. Как запустить? Daiver DAX: Администрирование 10 28.06.2007 15:59
Axapta Lessons: Axapta DLLs Blog bot DAX Blogs 0 28.10.2006 18:22
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:33.