|
![]() |
#1 |
Участник
|
C# dll в Axapta 3.0
Пробовал, ничего не помогает, в аксапте полученный Com объект невозможно создать, хотя регистрируется успешно, в GAC устанавливается и в реестре прописываются нужные ключи.
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; } } } 4.Теперь полученную dll можно использовать в управляемых приложениях. Но нам нужно получить доступ к dll из неуправляемого приложения, а в C# нет синтаксических конструкций для подобного объявления. Зато в IL есть. Поэтому, нужно дизассемблировать полученную dll выполнив в командной строке visual studio X++: Ildasm c:\prodjectPath\TestNetDll.dll out:c:\prodjectPath\TestNetDll.il 6.Находим метод SumInt и добавлем в него сразу после открывающей фигурной скобки следующие строки X++: .vtentry 1:1 .export [1] as sumInt .export [НомерЭкспортируемойФункции] as НазваниеЭкспортируемойФункции 7.В методе MultInt вставляем X++: .vtentry 1:2 .export [2] as sumInt 8.Компилируем X++: Ilasm c:\ProjectPath\TestNetDll.il /dll /out:c:\ProjectPath\TestNetDll.dll 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). |