想請教 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);
}
}