Получить указатель строкового массива из параметра ref из неуправляемого кода и обратно из указателя получить строковый массив - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть приложение, которое должно получить указатель своего массива string [] из управляемого dll. Кроме того, приложение снова передает этот указатель в управляемую dll, и внутри dll по этому указателю мне снова нужно получить доступ к массиву string [] и внести некоторые изменения.

Мне нужны 2 функции для этого, они должны выглядеть примерно так это:

public long GetPointer(ref string[] array)
{
   //somehow get the unmanaged pointer of array.
   //do not need to allocate any memory by Marshal.Copy or something, just get existing unmananged address of array
   //it could be like: 
   //string* ptrStr= *array;
   //but of course this does not work
   long ptr = ...;
   return ptr;
}

public void SetValue(long ptr, int index, string value)
{
   //somehow get string[] array using pointer address, without allocating anything
   //just address of existing array
   string[] array = ...;
   array[index] = value;
}

Это легко сделать в c ++, но я хочу знать: возможно ли это сделать в C#? Как? Я видел примеры получения указателя массива int [], и я сделал это, но он не работает со строками.

PS Я знаю, как вызвать управляемый dll из приложения. Мне нужен только код "..." в C#.

...