Я делаю приложение на C ++ и пытаюсь создать для него GUI front-end в C# и обмениваться данными между ними. Моя первоначальная идея состояла в том, чтобы скомпилировать серверную часть c ++ в виде DLL и использовать ее функции, импортировав ее в интерфейс и используя P / Invoke, но я столкнулся с проблемой:
Мои неуправляемые классы C ++ используют универсальные c типы (такие как std :: vector или std :: list) и не могут быть преобразованы в C# управляемый код (по крайней мере, насколько мне известно).
Один из моих классов в C ++:
class Album
{
public:
Album() = default;
Album(int ownerId, const std::string& name);
Album(int ownerId, const std::string& name, const std::string& creationTime);
const std::string& getName() const;
void setName(const std::string& name);
int getOwnerId() const;
void setOwner(int userId);
std::string getCreationDate() const;
void setCreationDate(const std::string& creationTime);
void setCreationDateNow();
bool doesPictureExists(const std::string& name) const;
void addPicture(const Picture& picture);
void removePicture(const std::string& pictureName);
Picture getPicture(const std::string& name) const;
std::list<Picture> getPictures() const;
void untagUserInAlbum(int userId);
void tagUserInAlbum(int userId);
void untagUserInPicture(int userId, const std::string& pictureName);
void tagUserInPicture(int userId, const std::string& pictureName);
bool operator==(const Album& other) const;
friend std::ostream& operator<<(std::ostream& strOut, const Album& album);
private:
int m_ownerId { 0 };
std::string m_name;
std::string m_creationDate;
std::list<Picture> m_pictures;
};
Каковы (если существуют) некоторые способы "обойти" проблему с маршалингом объекта класса, содержащего обобщенный тип c? Если их нет, каковы хорошие альтернативы взаимодействия между C# front-end и C ++ back-end, которые я могу использовать вместо P / Invoke?