代码之家  ›  专栏  ›  技术社区  ›  Akusete

C#/C++编程提示

  •  4
  • Akusete  · 技术社区  · 17 年前

    修改C++程序以与C#中的pInvoke一起使用的最佳方法是什么。NET CF?

    我已经设法得到了一些使用pInvoke从C#调用C++代码的示例。NET,但为每个访问点和所有STL返回类型编写包装器似乎非常艰巨和丑陋。还有别的办法吗,还是我有点累了?

    顺便说一句,托管C++不是一个选项,因为它不受任何形式的支持。NET CF。

    std::string foo () {
       return std::string ("Hi");
    }
    

    char* foo2 () {
       return foo().c_str(); //Very bad
       //the returned pointer is released when the std::string falls out of scope.
       //and will be invalid before the caller is able to do anything with it.
    }
    

    char* foo2 () {
       std::string f = foo();
       char* waste = new char[f.length()+1];
       strcpy (waste, f.c_str());
       return f;
    }
    

    4 回复  |  直到 7 年前
        1
  •  3
  •   Shane Powell    17 年前

    我个人认为这是值得的,但我同意另一篇文章的观点,即这并不容易。

    可能的方法包括:

    我建议尽量保持两者之间的界面尽可能简单。

        2
  •  1
  •   JasonRShaver    17 年前

    真的 想要做到这一点,你最好的选择是创建一些干净的C接口,这些接口封装了所有的C++和STL内容,并传递了可以很好地从.net传递到C的结构。根据你拥有的代码库有多大,这可能是一项非常困难的任务。

        3
  •  0
  •   Ilya Khaprov    17 年前

        4
  •  0
  •   Palace    16 年前

    推荐文章