powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / COM Объект, обращение к перечеслению
11 сообщений из 11, страница 1 из 1
COM Объект, обращение к перечеслению
    #39789518
udg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udg
Гость
Добрый день!
Есть на C# написанный COM объект (DLL)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
    [Guid("F8BCC00C-0168-41BE-A93E-5D02251DF31B")]
    public interface Packet_Interface
    {
        [DispId(1)]
        string operName { get; set; }
        [DispId(2)]
        List<string> parameters { get; set; }
    }
    [Guid("C7CC0CEF-F839-48FA-BBAE-9D0FF50D3E5A")]
    public interface VRNGO_Interface
    {
        [DispId(1)]
        Packet ExchangeOperation(string param1, string param2);
    }
    [Guid("622BA1EA-7A20-42C0-B809-866EB082F508"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface VRNGO_Events
    {

    }
    [Guid("561E3F5F-3FCA-42D1-B5EE-0B4F0FF14C89"),ClassInterface(ClassInterfaceType.None)]
    public class Packet : Packet_Interface
    {
        public string operName { get; set; }
        public List<string> parameters { get; set; }
        public Packet()
        {
            parameters = new List<string>();
        }
    }
    [Guid("70C8B981-F675-4D68-B239-36857A005222"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(VRNGO_Events))]
    public class VRNGO_Class : VRNGO_Interface
    {
        public VRNGO_Class()
        {

        }
        public Packet ExchangeOperation(string param1, string param2)
        {
            ws.Service srv = new ws.Service();            
            try
            {
                Packet answer = new Packet();
                ws.Packet srvAnswer;
                srvAnswer = srv.ExchangeOperation(param1, param2);
                answer.operName = srvAnswer.operName;
                answer.parameters.Add("test");
                
                return answer;
            }
            catch (Exception err)
            {
                Packet packetError = new Packet();
                packetError.operName = "ERROR," + err.Message;
                return packetError;
            }            
        }
    }



в Excel подключаю библиотеку скомпилированную и пытаюсь получить доступ к
Код: c#
1.
 List<string> parameters { get; set; }


Не могу понять как, подскажите как это сделать?
Код VBA
Dim srv As VRNGO.VRNGO_Class
Dim answer As VRNGO_Packet
Dim param AS VRNGO_Parameter
Dim inn As String
Dim c As Integer
Set srv = CreateObject("VRNGO.VRNGO_Class")
For Each rw In Selection.Rows
inn = rw.Cells(1, 3).Value
Set answer = srv.ExchangeOperation("DUBLIUL", inn)
rw.Cells(1, 7).Value = answer.operName
Set param = answer.parameters(0) <--- тут ошибка объекта нет.
Next
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789552
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Dim param AS Object



а тут вообще что-то есть?
Код: vbnet
1.
answer.parameters
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789567
udg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udg
Гость
исправил код Excel VBA
Dim srv As VRNGO.VRNGO_Class
Dim answer As VRNGO_Packet
Dim param As Object



Dim inn As String
Dim c As Integer
Set srv = CreateObject("VRNGO.VRNGO_Class")
For Each rw In Selection.Rows
inn = rw.Cells(1, 3).Value
Set answer = srv.ExchangeOperation("DUBLIUL", inn)
rw.Cells(1, 7).Value = answer.operName
Set param = answer.Parameters(0) <-- вылетает тут с ошибкой Wrong number of arguments or invalid property assigment

Next
End Sub
answer.Parameters внутри должно быть значение, в COM внутри метода ExchangeOperation есть строка
Код: c#
1.
2.
answer.operName = "Dubli"
answer.parameters.Add("test123");


в Excel answer.operName работает вывод, в parameters не знаю как вытащить значения.
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789568
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так:

Код: vbnet
1.
2.
3.
4.
...
Dim params As Variant
Set params = answer.parameters
...


что будет в params ?
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789595
udg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udg
Гость
Изменил код на

Dim srv As VRNGO.VRNGO_Class
Dim answer As VRNGO_Packet
Dim param As Variant
Dim inn As String
Dim c As Integer
Set srv = CreateObject("VRNGO.VRNGO_Class")
For Each rw In Selection.Rows
inn = rw.Cells(1, 3).Value
Set answer = srv.ExchangeOperation("DUBLIUL", inn)
rw.Cells(1, 7).Value = answer.operName
Set param = answer.Parameters
Next
End Sub
Ошибка пропала.
Добавил в Watch переменную param. До вызова Set param показывает Varaint/Empty. После вызова Variant/Object, но если раскрыть параметр в колонке value No Variables
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789599
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо:
Код: c#
1.
List<string>



попробуйте переделать на:
Код: c#
1.
string[]
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789606
udg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udg
Гость
Поставил
Код: c#
1.
public string[] parameters { get; set; }


Теперь ошибка на строчке
Set param = answer.Parameters: Objecr required
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789614
udg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udg
Гость
Убрал Set из Set param, на просто param = answer.parameters, все получилось. А почему List не получается использовать?
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789662
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789676
udg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udg
Гость
Petro123,

Я полагал что COM дает больше возможностей чем ОLE, если например в том же Excel подключить CreateObject("Word.Application"), то Word классы, структуры и перечисления доступны. Скорее всего в написании COM надо как-то маршалинг прописывать или еще как.
...
Рейтинг: 0 / 0
COM Объект, обращение к перечеслению
    #39789712
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
udg,
Вот из за маршаллинга и проблемы в типах от шарпа и других языков.
В java List один, а в шарпе другой.
Работает же?
Удачи!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / COM Объект, обращение к перечеслению
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]