Как вернуть строку из функции на C++ (которая находится в dll) в C# проект
Формулировка задачи:
Добрый день, есть dll на C++, которая служит как бы оберткой к сишной библиотеке. В этой Dll есть класс , и в нем есть методы, использующие библиотеку, например, Далее эта Dll добавляется (через Добавить ссылку...) в C# проект. Там создается экземпляр класса ClassName и вызывается метод metod1, который возвращает результат типа bool (false или true). В С# этот результат получаю нормально все, все работает. Вопрос заключается в том, как создать новый метод в Dll, который возвращал хотя бы просто строку и эту строку можно было бы получить в C#, вызвав этот метод (а еще лучше вернуть структуру). С C++ знаком поверхностно, помогите пожалуйста. Не думал что работа со строками настолько сложна .Не знаю что передать в C# в качестве параметра:Ругается, что name не удается преобразовать из типа структуры созданного в C# в тип, созданный в C++
public ref class ClassName
bool metod1(){ return true;}
Есть например в Dll на C++ структура и метод
struct Name { char FirstName[100]; char LastName[100]; }; void TestFunction(struct Name *name) { strncpy_s(name->FirstName, "TestFamily", sizeof(name->FirstName)); };
[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);
Решение задачи: «Как вернуть строку из функции на 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; }