|
![]() |
#1 |
Участник
|
Почитайте тут http://msdn.microsoft.com/ru-ru/library/tzat5yw6.aspx Вкратце: Регистрация .Net dll с помощью утилиты regasm приводит к тому что dll можно будет использовать как COM объект. Т.е. все ваши public классы в dll получат свои CLSID и ProgId. Получается что в аксапте нужно будет использовать конструкцию
X++: Com myCom; ; Com myCom = new Com("MyNamespace.MyClass"); myCom.MyFunctionName(); X++: DLLFunction dllFunction; DLL dll; ; dll = new DLL(@"c:\test.dll"); dllFunction = new DLLFunction(dll,"MyNamespace.MyClass.MyFunctionName") Последний раз редактировалось _scorp_; 26.12.2008 в 14:38. |
|
![]() |
#3 |
Участник
|
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). |