Задать вопрос
@EvilBeaver
упоротый гик

Как вызвать данную функцию из сборки на управляемом с++?

Есть сборка на C#, в которой есть публичный метод, принимающий System.Object, трактуя его, как COM-объект.
Из C# этот метод используется примерно так:
var ComType = Type.GetTypeFromProgID("Excel.Application");
var obj = Activator.CreateInstance(ComType);
ProcessObject(obj); // ProcessObject(System.Object objToProcess)

Функция ProcessObject принимает object, трактуя его, как IDispatch.

Задача: вызвать эту функцию из сборки на управляемом с++. У меня есть обычный (неуправляемый) указатель на IDispatch.

MyClass::MyMethod(IDispatch* pDesigner)
    {
	// здесь должен быть вызов функции ProcessObject 
        // из сборки на С# с передачей туда указателя pDesigner
    }


Каким-то образом нужно его преобразовать в System.Object и передать в C#. Интересует правильный способ сделать это.
  • Вопрос задан
  • 2678 просмотров
Подписаться 4 Оценить 2 комментария
Решения вопроса 1
@EvilBeaver Автор вопроса
упоротый гик
На тостере традиционно плохо с конкретными ответами. Только рассуждения о "вы делаете не так"
Вот конкретный ответ, вдруг кому-то пригодится:

// IUnknown* pDesigner
IntPtr handle = IntPtr(pDesigner);
Object^ managedObject = System::Runtime::InteropServices::Marshal::GetObjectForIUnknown(handle);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AxisPod
@AxisPod
Вообще почитайте сначала про Ole Automation. Для своей задачи вы используете слегка не то что надо. Затем поглядите на то, как это сделано в .NET, есть готовые инструменты. Сам делал на C++ и C#, так на C++ это ад, лучше туда не лезть. А вот на C# прямо все прекрасно, даже не надо будет думать о COM, Ole вообще.

UPD. Сначала обманул с версией, дело было на .net 1.1.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы