powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов COM-OLE метода с out param'етрами (позднее связывание)
4 сообщений из 4, страница 1 из 1
Вызов COM-OLE метода с out param'етрами (позднее связывание)
    #38346565
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал на C# (код возможно чудоковат, но работает). Помогите написать тоже самое на C++ (без использования дот нета).
Код: 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.
using System;
using System.Runtime.InteropServices;
using System.Reflection;

namespace TestAcad {
    public class Program {
        
        public static void Main(String[] args) {
            Object acad = Marshal.GetActiveObject("AutoCAD.Application");
            setProperty(acad, "Visible", true);
            Object document = getProperty(acad, "ActiveDocument");
            Object model = getProperty(document, "ModelSpace");
            
            double[] a = { 0, 0, 0 }, b = { 100, 100, 0 };
            Object line = invoke(model, "AddLine", a, b);
            setProperty(line, "color", 1);
            
            Object utility = getProperty(document, "Utility");
            
            Object[] parameters = { new Object(), new Object(), "Укажите линию" };
            invoke(utility, "GetEntity", modifiers(true, true), parameters);
            
            setProperty(parameters[0], "color", 1);
        }
        
        
        private static Type invoker = new Object().GetType();

        public static Object getProperty(Object target, String name) {
            return invoker.InvokeMember(name, BindingFlags.GetProperty, null, target, null);
        }

        public static void setProperty(Object target, String name, params Object[] values) {
            invoker.InvokeMember(name, BindingFlags.SetProperty, null, target, values);
        }

        public static Object invoke(Object target, String name, params Object[] values) {
            return invoker.InvokeMember(name, BindingFlags.InvokeMethod, null, target, values);
        }

        public static Object invoke(Object target, String name, ParameterModifier[] mod, Object[] values) {
            return invoker.InvokeMember(name, BindingFlags.InvokeMethod, null, target, values, mod, null, null);
        }

        public static ParameterModifier[] modifiers(params bool[] values) {
            ParameterModifier[] parameterModifiers = new ParameterModifier[values.Length];
            for (int i = 0; i < values.Length; ++i) {
                parameterModifiers[i] = new ParameterModifier(1);
                parameterModifiers[i][0] = values[i];
            }
            return parameterModifiers;
        }
    }
}



В принципе мне будет достаточно последних 3х строк из Main метода. Указатель на VARIANT у меня есть.
GetEntity.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <objbase.h>
#include <oleauto.h>
#include <jni.h>

//#include <atlbase.h>
//#include <olectl.h>
//#include "util.h"

JNIEXPORT jlong JNICALL Java_testnative_Dispatch_getEntity(JNIEnv *env, jclass clas, jlong pointer) {
    VARIANT * utility = (VARIANT *) pointer;
    VARIANT * entity = 0; //...
    return (jlong) entity;
}

...
Рейтинг: 0 / 0
Вызов COM-OLE метода с out param'етрами (позднее связывание)
    #38346567
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,

использование IDispatch смотрите, а не JNI(Java Native Interface)
...
Рейтинг: 0 / 0
Вызов COM-OLE метода с out param'етрами (позднее связывание)
    #38346570
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилavp.mk,
использование IDispatch смотрите, а не JNI(Java Native Interface)Не не, мне JNI тоже нужен..)
Я эту проблему пытаюсь решить: http://www.sql.ru/forum/1035744/vyzov-com-ole-metoda-s-out-param-etrom-pri-pomoshhi-jacob-vozmozhno
...
Рейтинг: 0 / 0
Вызов COM-OLE метода с out param'етрами (позднее связывание)
    #38346601
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,

без out параметров - получилось?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов COM-OLE метода с out param'етрами (позднее связывание)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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