c# - 将 c++ 非托管代码编组为 c# 托管代码的替代方法
问题描述
我正在制作一个 C++ 应用程序并尝试在 C# 中为它创建一个 GUI 前端,并在两者之间进行通信。我最初的想法是将 c++ 后端编译为 DLL 并通过将其导入前端并使用 P/Invoke 来使用其功能,但我遇到了一个问题:
我的非托管 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++ 后端之间的通信替代 P/Invoke 的良好替代方案吗?
解决方案
推荐阅读
- php - 将对象对象转换为对象数组(PHP,Laravel)
- java - 每次使用新值启动时如何重置倒数计时器?
- c# - JsonConvert - 强制 MissingMember 为空
- kubernetes - 在 2 节点裸机集群上设置 Rancher Hello World
- javascript - 如何让不同的元素同时响应 - 按下多个按钮同时点亮多个框
- ios - 使用 CoreData 和数组填充表视图部分
- java - zeroDateTimeBehavior=convertToNull 在使用休眠的 jdbc url 中不起作用
- html - woocommerce 电子邮件中的 TM 符号图像而不是 unicode 特殊字符
- excel - 比较产生意外结果的字符串
- awk - 使用 AWK 时无输出