我正在将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);