Как вернуть строку из функции на C++ (которая находится в dll) в C# проект

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

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

Добрый день, есть dll на C++, которая служит как бы оберткой к сишной библиотеке. В этой Dll есть класс
public ref  class ClassName
, и в нем есть методы, использующие библиотеку, например,
bool metod1(){ return true;}
Далее эта Dll добавляется (через Добавить ссылку...) в C# проект. Там создается экземпляр класса ClassName и вызывается метод metod1, который возвращает результат типа bool (false или true). В С# этот результат получаю нормально все, все работает. Вопрос заключается в том, как создать новый метод в Dll, который возвращал хотя бы просто строку и эту строку можно было бы получить в C#, вызвав этот метод (а еще лучше вернуть структуру). С C++ знаком поверхностно, помогите пожалуйста. Не думал что работа со строками настолько сложна .
Есть например в Dll на C++ структура и метод
struct Name
    {
        char FirstName[100];
        char LastName[100];
    };
     void  TestFunction(struct Name *name)
        {
 
           strncpy_s(name->FirstName, "TestFamily", sizeof(name->FirstName));
 
        };
Не знаю что передать в C# в качестве параметра:
  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public  struct Name
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
            public string FirstName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
            public string LastName;
        };
 
  Var name = new Name();
  faceDetection.TestFunction(name);
Ругается, что name не удается преобразовать из типа структуры созданного в C# в тип, созданный в C++

Решение задачи: «Как вернуть строку из функции на C++ (которая находится в dll) в C# проект»

textual
Листинг программы
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public  struct Name
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
            public StringBuilder FirstName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
            public StringBuilder LastName;
        }

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

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