想请教 scripting 使用到 C++ native
plugin相关的问题
我想要从某个 native plugin中拿回处理过的字串内容
看过网络上的资讯知道应该用 StringBuilder
但因为我要重复这个呼叫过程
所以我想试着使用共用的 StringBuilder 物件
而不是每次都重新 new StringBuilder()
但这样的话在执行呼叫 native plugin API多次后(可能 20次以上)
我得到的 text内容就会有错误(比正确的要短少)
可是如果我每次呼叫 native plugin API都传入全新的物件 ( 透过 new
StringBuilder() )
我所得到的字串内容就会全部都正确
因为我是第一次做 unmanaged / managed code之间沟通的 programming
所以这部份我不太熟
不知道是过程中哪部分内存有出错
也很想要让 StringBuilder 物件可保持单一共用就好
也很想要让 StringBuilder 物件可保持单一共用就好
也很想要让 StringBuilder 物件可保持单一共用就好
也很想要让 StringBuilder 物件可保持单一共用就好
也很想要让 StringBuilder 物件可保持单一共用就好
以下是我的 sample codes
==== C++ native plugin部分 ====
extern "c" declspec(dllexport) void cppfunc( char * tostring, int maxlen)
{
std::string source = .... // get texts from opened file
if(source.length() < maxlen)
{
strcpy(tostring, source.c_str());
}
}
==== Unity C# script部分 ====
[DllImport ("CppPlugin")]
static extern void cppfunc(StringBuilder tostring, int maxlen);
......
{
{
StringBuilder thestring = new StringBuilder(_maxlen); // maxlen = 64
StringBuilder thestring = new StringBuilder(_maxlen); // maxlen = 64
while( /** if more in file **/ )
while( /** if more in file **/ )
{
#if METHOD1
thestring = new StringBuilder(_maxlen); // method 1, always correct
#else if METHOD2
thestring.Length = 0; // method 2, get wrong strings after several calls
#endif
CppInterop.cppfunc(thestring, _maxlen);
}
}