C ++ / CLI如何将数组< String ^> ^ str转换为std :: string * s? [英] C++/CLI How to convert array<String^>^ str in to std::string * s ?

查看:418
本文介绍了C ++ / CLI如何将数组< String ^> ^ str转换为std :: string * s?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望将托管的字符串数组传递给非托管的c ++,并在非托管代码中填充该字符串数组。


我有函数


< pre class ="prettyprint"> bool wrapper :: Database :: mf_get_Subject(array< String ^> ^ subject,size_t num)
{
pin_ptr< String ^> pistring =& subject [0];
db-> mf_get_Subject((std :: string *)pistring,num); //此崩溃程序
}

当 (std :: string *)pistring传入非托管get_Subject时,程序崩溃。如何纠正传递pintring到unmanaged?我做得对吗?

解决方案


bool wrapper :: Database :: mf_get_Subject(array< String ^ > ^ subject,size_t num)

{

   pin_ptr< String ^> pistring =& subject [0];

   db-> mf_get_Subject((std :: string *)pistring,num); //这个崩溃程序


我并不感到惊讶:)


因为该函数似乎是一个吸气剂,根据mf_get_Subject的实现,你至少需要为一个字符串数组分配空间,然后从getter返回,将它们转换为托管String对象(String构造函数可以做到这一点)

for you IIRC)。


你的界面看起来在托管代码中使用起来并不是特别友好 - 如果你设计一个更理想的C#,它可能更整洁

接口,然后在C ++ / CLI中实现,以调用您的本机代码。


Dave



I want pass arrays of strings from managed in to unmanaged c++ and fill that string array in unmanaged code.

i have function

bool wrapper::Database::mf_get_Subject(array<String ^> ^ subject, size_t num)
{
    pin_ptr<String ^> pistring = &subject[0];
    db->mf_get_Subject((std::string *)pistring, num); // this crash program
}

when (std::string *)pistring is passed in to unmanaged get_Subject, program crash. How to correct pass pinstring in to unmanaged? I am doing it right?

解决方案

bool wrapper::Database::mf_get_Subject(array<String ^> ^ subject, size_t num)
{
   pin_ptr<String ^> pistring = &subject[0];
   db->mf_get_Subject((std::string *)pistring, num); // this crash program

I'm not surprised :)

As the function appears to be a getter, depending on the implementation of mf_get_Subject you'll al least need to allocate space for
an array of strings, then on return from your getter, convert those into managed String objects (the String constructor can do that
for you IIRC).

Your interface doesn't look particularly friendly to use from managed code though - it might be neater if you design a more ideal C#
interface, then implement that in C++/CLI to call your native code.

Dave


这篇关于C ++ / CLI如何将数组&lt; String ^&gt; ^ str转换为std :: string * s?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆