Как достигается совместимость между собственным кодом и кодом .NET в C++/CLI? (технически)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как достигается совместимость между собственным кодом и кодом .NET в C++/CLI? (технически)

Сообщение Anonymous »

C++/CLI обеспечивает совместимость между собственным кодом и кодом .NET и наоборот.
По данным Microsoft, эта совместимость обусловлена ​​тем, что сборка содержит как собственный код, так и код MSIL, что позволяет собственному коду вызывать код .NET и наоборот. Но с технической точки зрения, как достигается такая совместимость между собственным кодом и кодом MSIL?
Предполагая, что собственный код хранится в разделе .text образа .NET PE, а код MSIL — в разделах .NET, как код MSIL может вызывать собственный код? И как собственный код может вызывать код MSIL? Как они общаются? Кто получит контроль над программой? Собственный код или управляемый код? Если управляемый код получит управление, он будет выполняться под CLR, но как выделить память в «родную» кучу? А если происходит обратное, то как машинный код выделяет память в куче CLR, если CLR управляет программой?
Например:

Код: Выделить всё

class Example {
public:
int example_method() {
return 1;

}
};
Предполагая, что следующий класс представляет собой неуправляемый код, мы можем выделить его в куче, используя new, но gcnew также существует для управляемого кода. Как это возможно? Как можно использовать объекты в куче CLR и наоборот? Как работают эти смешанные сборки?
Я не нашел много технической информации по этому поводу; Буду признателен за вашу помощь.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -c-cli-tec
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»