Arhn - архитектура программирования

Вызов статического метода C++/CLI из C++

В проекте C++CLI я вызываю собственный объект в событии, я хотел бы иметь возможность вызывать функцию C++/CLI из собственного C++, когда это событие запускается. На данный момент у меня есть следующий код, но он возвращает ошибку, что PickObjects() не является членом ManagedClass. Возможен ли обратный вызов статического метода C++CLI?

#pragma once
#include "Stdafx.h"
#include "ManagedClass.h"

namespace Unmanaged
{
    public class EventHandlers
    {
    public:
        static void OnClick(customObject* caller, void *calldata)
        {
            //call managed method, can get here from CLI
            ManagedClass::ManagedObject::PickObjects();
        }
    };
}

Вот фрагмент кода C++CLI, здесь все работает нормально:

namespace ManagedClass
{
    public ref class ManagedObject  
    {
    public:
         static void PickObjects()
         {
         //pick stuff when called
         }
    };
}

РЕДАКТИРОВАТЬ: все заработало, ошибка определенно была связана с тем, как Visual Studio скомпилировала файлы. Обновление с решением на мгновение. Спасибо Матиасу за помощь.

13.07.2016

  • как уже сказал Матиас.. пожалуйста, покажите нам больше кода.. мы не можем догадаться, что у вас не так.. сделайте это mcve 13.07.2016

Ответы:


1

Кажется, что классы не компилируются в правильном порядке. Добавление класса EventHandlers в конец ManagedClass заработало.

namespace ManagedClass
{
    public ref class ManagedObject  
    {
    public:
         static void PickObjects()
         {
         //pick stuff when called
         }
    };
    public class EventHandlers
    {
    public:
        static void OnClick(customObject* caller, void *calldata)
        {
            ManagedClass::ManagedObject::PickObjects();
        }
    };
}
13.07.2016

2

Да, вызов статического метода из другого статического метода возможен. В этом случае похоже, что вы не объявили ManagedClass::PickObjects() должным образом. Вы можете показать нам его код (достаточно заголовка).

13.07.2016
  • Добавлен фрагмент на основе класса C++CLI. 13.07.2016
  • Код выглядит хорошо. Есть ли у вас какие-либо перенаправления объявлений, которые мешают компилятору найти объявление? 13.07.2016
  • Ссылка необходима в C++/CLI, это версия C++ с управлением памятью от Microsoft. 13.07.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..