Цитата:
Сообщение от
belugin
Пробовал, ничего не помогает, в аксапте полученный 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));
}