使用 Marshal.StringToHGlobakAnsi 后可以调用 Marshal.CoTaskMem(ptrA) 吗?
这是我的代码:
IntPtr myPtr = Marshal.StringToHGlobalAnsi("".PadLeft(myLength, ' '));
MyCFunc(myPtr);
string myStr = Marshal.PtrToStringAnsi(myPtr);
if (myPtr != IntPtr.Zero)
Marshal.FreeCoTaskMem(myStr);
我的问题是
- 我是否只需要调用 Marshal.FreeHGlobal 而不是 Marshal.FreeCoTakMem? (第 5 行)
- 使用 StringToHGlobalAnsi(SRRING.PadLeft) 是否完美? (第 1 行)
有关更多信息,我的代码主要在我的工作中运行。但有时 'myStr'(第 3 行)具有意想不到的值(可能是内存损坏)。所以我会尝试改变免费的方式。我只是想知道并想确保我的选择是最好的。提前致谢。
Here's my code:
IntPtr myPtr = Marshal.StringToHGlobalAnsi("".PadLeft(myLength, ' '));
MyCFunc(myPtr);
string myStr = Marshal.PtrToStringAnsi(myPtr);
if (myPtr != IntPtr.Zero)
Marshal.FreeCoTaskMem(myStr);
My Questions are
- Did I have to call only Marshal.FreeHGlobal instead of Marshal.FreeCoTakMem? (line 5)
- Is it perfect to use StringToHGlobalAnsi(SRRING.PadLeft)? (line 1)
For more information, my code is working mostly in my work. But sometimes 'myStr'(line 3) has unexpected value (probably broken memory). So I will try to change the free method. I just wondered and want to make sure my choices is the best. Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论