PInvoke并将c ++ dll中的字符串返回到C#应用程序

时间:2017-06-25 14:47:12

标签: c# string pinvoke

我正在将C包装器写入C ++类,以使用PInvoke将其暴露给C#代码。我发现了一些有趣的东西,我想知道为什么这段代码表现得像这样。问题是为什么c_str返回空值?

// c_++ class
class Foo
{
public:
    method returns m_fullName
    std::string fullName() const;
private:
    const std::string m_fullName;
};


extern "C" const char* fullNameFoo(Foo* object)
{
    if (object != NULL)
    {
        // this return empty string - but why? class exists so fullName exists too
        return object->fullName().c_str();

        // returns proper value
        return strcpy(new char[object->fullName().size()], object->fullName().c_str());
    }

    return NULL;
}

// C# code
[DllImport("mylib.dll", EntryPoint = "fullNameFoo")]
static public extern IntPtr FullNameFoo(IntPtr foo);

0 个答案:

没有答案