Возвращение массива строк из dll - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, со следующей проблемой. Имеется проект на C# и dll на С++. Я пытаюсь вернуть из функции, выполняющейся в dll на С++, массив строк, для чего сначала создаю массив StringBuilder'ов в коде на C#, передаю его в dll, заполняю значениями, а потом возвращаю обратно в код на C#. Но строчки остаются пустыми. Что интересно, если всё то же самое сделать не с массивом StringBuilder'ов, а с одним StringBuilder'ом, то код работает. Код на C#:
class Program
    {
        static void Main(string[] args)
        {
            StringBuilder str = new StringBuilder(10);
            
            try
            {
                SomeString(str, str.Capacity);
                Console.WriteLine(str);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc);
            }
 
            try
            {
                StringBuilder[] arrStr=new StringBuilder[5];
                for (int i=0; i<arrStr.Length; i++)
                {
                    arrStr[i]=new StringBuilder(10);
                }
 
                SomeStringArray(arrStr, arrStr.Length, arrStr[0].Capacity);
 
                foreach (StringBuilder strB in arrStr)
                    Console.WriteLine(strB);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc);
            }
        }
 
        [DllImport("ConsoleApplication1.dll")]
        private extern static void SomeString(StringBuilder str, int length);
 
        [DllImport("ConsoleApplication1.dll")]
        private extern static void SomeStringArray(StringBuilder[] str, int dimentionLenth0, int dimentionLenth1);
    }
Код dll на С++:
#include <string.h>
#include <string>
#include <vector>
 
using namespace std;
 
//extern "C" __declspec(dllexport) void SomeString (char str[], int length)
extern "C" __declspec(dllexport) void SomeString (char* str, int length)//оба варианта объявления функции работают
{
    /*for (int i=0; i<length; i++)
    {
        str[i]='й';
    }*/
 
    /*str[0]='й';
    str[1]='ц';
    str[2]='у';
    str[3]='к';
    str[4]='е';
    str[5]='н';
    str[6]='\0';*/
 
    strcpy(str, "фывапролджэ");//все способы обращения к строке работают
}
 
extern "C" __declspec(dllexport) void SomeStringArray (char** str, int dimentionLenth0, int dimentionLenth1)
{
 //ни один из способов обращения к массиву строк не работает
 
    /*for (int i=0; i<length; i++)
    {
        str[i]='й';
    }*/
 
    /*str[0]='й';
    str[1]='ц';
    str[2]='у';
    str[3]='к';
    str[4]='е';
    str[5]='н';
    str[6]='\0';*/
 
    //strcpy(str, "фывапролджэ");
 
    for (int i=0; i<dimentionLenth0; i++)
    {
        for (int j=0; j<dimentionLenth1; j++)
        {
            str[i][j]='q';
        }
    }
}
Заранее благодарен всем откликнувшимся.

Решение задачи: «Возвращение массива строк из dll»

textual
Листинг программы
marshaledArray[i][j] = L'ё';

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы