У меня возникли проблемы с выяснением того, как ссылаться на управляемый код C++, который вызывает код C# из неуправляемого кода на C++. Позвольте мне выбросить несколько сценариев:Неуправляемый код кода C++ управляемый код C++, который вызывает код C#
- у меня неуправляемый ссылочный код и вызвать мой управляемый код, вызов моего управляемого кода на мой C# код закомментирована, строит и работает просто отлично. Я раскомментирую свой код C#, теперь я получаю ошибки компилятора, говоря, что мое пространство имен C# не существует.
- В моем неуправляемом коде я прокомментирую ссылку и позвоню в мой управляемый код. Мой управляемый код вызывает мой код C#. Строит и работает просто отлично ... Вы получаете картину отсюда.
Ошибка компилятора C2653.
Вот что я делаю:
Неуправляемый C++ код: Я установил компоновщик включить мой Managed C++ Lib файл.
#include "ManagedCpp.h"
ManagedCpp::foo();
Managed C++:
extern "C" __declspec(dllexport) void __stdcall foo()
{
CssCode::bar();
}
C#
public static void bar()
{
// From here it initializes some stuff from the registry
// into some data structures which I plan on marshaling
// back with other method calls, which I know involves placing
// things on the stack that can be returned normally to the
// managed c++ code which then will need to be marshed back to the
// unmanaged c++ code.
// All code will be static.
}
Что я делаю неправильно? Насколько я могу судить, мне нужно скрыть свои вызовы C# из неуправляемого кода, но я не совсем уверен, как это сделать.
Обеспечить больше контекста. Что такое ошибка компилятора? Каково определение класса 'CssCode', а именно' bar() 'method? Это метод «public static»? – Xiaoy312
Я отредактирую сообщение, чтобы дать дополнительную информацию. – Wes
Вы можете смешивать неуправляемый и управляемый C++ в одном модуле компиляции. Нет необходимости переместить управляемый C++ в отдельную DLL. Просто говорю'. Кроме того, вы можете вызывать C# dll прямо из неуправляемого C++, либо через COM-видимые сборки, либо через семейство API CorXXX. –