【问题标题】:Importing native c++ class into CLI project将本机 c++ 类导入 CLI 项目
【发布时间】:2011-07-24 20:38:11
【问题描述】:

我正在创建一个 CLI 项目以包装现有的本机 c++ 项目(同一解决方案文件中的两个独立项目)。我想在托管类中包含一个指向本机类的指针作为成员。从我在线阅读的文档中,如果托管代码和非托管代码都在同一个项目中,则可以这样做。如果原生代码和托管代码在不同的项目中,那么唯一的选择是在两个项目之间使用 dllimport 和 dllexport 属性,并将原生代码类函数导出为静态函数。

这些是我唯一的选择,还是我可以在两个单独的项目之间导入和导出整个原生类?我问是因为这决定了我如何设计托管包装器。提前致谢。

【问题讨论】:

    标签: visual-c++ c++-cli wrapper managed mixed-mode


    【解决方案1】:

    好吧,“指针”这个词让我愣了一分钟。你的意思是你想在没有 P/Invoke 的情况下使用 C++/CLI 代码中的一些本机代码?当然。只需包含标题,链接到库。如果他们都是本地人,你会怎么做。现在它被称为 C++ Interop - 我更喜欢旧名称(It Just Works Interop)。

    您当然可以从任何地方包含一个标头,并从任何地方添加一个链接器输入,因此从技术上讲,它们不必在同一个 .sln 中,但如果它们是,Visual Studio 会让您的生活更轻松一些。

    【讨论】:

    • 如果将本机项目设置为构建静态 .lib 而不是 DLL,它也会有所帮助。否则,您很容易遇到问题,例如从一个 CRT 堆分配并尝试使用另一个堆释放。有时值得激活“链接库源”选项,因为链接到静态库不会在不需要的对象中运行全局构造函数。 “它可以工作(如果你小心的话”),但比 p/invoke 容易得多。
    • 很高兴知道。我的本机代码是 dll 而不是静态库。
    • 你可以让 VS 让你成为一个“便利库”,你可以从调用项目中链接到它。
    • 你有关于如何制作便利库的链接吗?
    • 显然在本世纪它们被称为“导入库”——见stackoverflow.com/questions/584041/…
    猜你喜欢
    • 2013-06-19
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多