Как я могу передать и сохранить указатели C / C ++ в C # и вернуть их обратно, используя Mono Project - PullRequest
0 голосов
/ 02 февраля 2019

У меня серьезная проблема: выяснить, как эффективно передавать и хранить указатели C на C #, а затем возвращать их обратно, когда они мне нужны, с Mono.Я строю слой сценариев с C # поверх C ++.Например (псевдокод):

C ++:

GameObject* owner = new GameObject();
void* args[1] = {owner};
return_object = mono_runtime_invoke("InitReference", mono_object, args, &exception);

C #: (экземпляр класса C # GameObject)

public IntPtr InitReference(IntPtr game_object_ptr)
{
    return game_object_ptr;
}

Я хочу добиться отношения междуЭкземпляр объекта C ++ и фактическое представление C #.Об этом мало информации, и я немного растерялся.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

После некоторых попыток я решил свою проблему: сначала я сохранил адрес моего указателя в буфере символов, а затем передал его в mono в виде массива int типа int [].Это позволило моему адресу указателя остаться в живых в среде C #, и я могу получить его, когда захочу.

0 голосов
/ 02 февраля 2019

Мое предложение:
Новая структура .Net с атрибутом StructLayout, например:

[StructLayout( LayoutKind.Explicit )]
public struct GameObject
{
  [FieldOffset(0)]
  public int Id;
  ......
}

, тогда указатель .net может указывать на экземпляр структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...