GameDesign 板


LINE

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



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.40.34.73
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1514209817.A.F64.html ※ 编辑: riveranb (114.40.34.73), 12/25/2017 21:59:58 ※ 编辑: riveranb (114.40.34.73), 12/25/2017 22:00:18
1F:推 cjcat2266: 感觉是因为设Length的关系,切buffer长度,然後C++方又12/25 23:51
2F:推 cjcat2266: 感觉是因为设Length的关系,切buffer长度,然後C++方又12/25 23:51
3F:→ cjcat2266: 不知道被切了,最後最後只有写到C#方有效buffer长度,12/25 23:51
4F:→ cjcat2266: 不知道被切了,最後最後只有写到C#方有效buffer长度,12/25 23:51
5F:→ cjcat2266: 这样搞不好会危险?话说strcpy最後已经会加上’/0’不12/25 23:51
6F:→ cjcat2266: 是?那这样就不用设Length也可以吧?我是没用过这种nat12/25 23:51
7F:→ cjcat2266: ive沟通方式,我还有个疑问是C#会正确把StringBuilder12/25 23:51
8F:→ cjcat2266: ive沟通方式,我还有个疑问是C#会正确把StringBuilder12/25 23:51
9F:→ cjcat2266: 的buffer位址传给C++的char*参数吗?还是其实应该要传12/25 23:51
10F:→ cjcat2266: 个char[]才对?12/25 23:51
~ ※ 编辑: riveranb (42.77.58.61), 12/26/2017 07:14:29 ※ 编辑: riveranb (42.77.58.61), 12/26/2017 07:15:02
11F:→ riveranb: 不好意思昨天没有把codes表示完整,已编辑过12/26 07:16
12F:→ riveranb: METHOD1和METHOD2 不会同时执行,但目的相同12/26 07:17
13F:→ riveranb: METHOD1 是每次都 new StringBuilder,这样每次拿到的12/26 07:18
14F:→ riveranb: 字串都正确12/26 07:18
15F:→ riveranb: METHOD2 是重覆使用StringBuilder,没次把之前内容清空12/26 07:19
16F:→ riveranb: 但取回的字串内容会随执行次数变多而出错12/26 07:20
17F:→ riveranb: 长度越来越短。比如:12/26 07:20
18F:→ riveranb: SamplesPerPixel => SamplesPer => Sample12/26 07:21
※ 编辑: riveranb (42.77.58.61), 12/26/2017 07:23:39
19F:→ riveranb: 至於透过StringBuilder从 native DLL api 取回字串用法12/26 07:26
20F:→ riveranb: 至於透过StringBuilder从 native DLL api 取回字串用法12/26 07:26
21F:→ riveranb: 是网路上众多stackoverflow 大神教der,我自己也不熟12/26 07:26
22F:→ riveranb: 熟12/26 07:26
※ 编辑: riveranb (42.77.58.61), 12/26/2017 07:28:16
23F:→ riveranb: https://goo.gl/okAMCi 12/26 07:32
24F:推 cjcat2266: 我的意思是,把Length设成0的时候C#应该是有可能会把 12/26 07:39
25F:→ cjcat2266: 内部buffer切短,导致C++写超出buffer范围而造成错误 12/26 07:39
26F:→ cjcat2266: strcpy本身已经有在字串尾端写上'\0'的行为,理论上不 12/26 07:40
27F:→ cjcat2266: 不需要在C#端另外碰Length 12/26 07:40
28F:→ cjcat2266: 写超出内部buffer范围,看来在你这特定的情况下没有造 12/26 07:41
29F:→ cjcat2266: 成程式当掉,但理论上是有可能当掉的 12/26 07:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP