C ++和Win32:我什么时候必须发布变量等?

时间:2015-11-27 11:13:04

标签: java c++ winapi jna

我通常是一名Java程序员,我的C ++日子已经结束至少15年了。现在我使用C ++为一些Win32函数构建一个桥(dll)。

问题仍然存在,我什么时候必须发布从Win32调用中获取的字符串等?

例如:User32.dll =&gt; WINUSERAPI UINT WINAPI RealGetWindowClassA(__in HWND hwnd, __out_ecount_part(cchClassNameMax, return) LPSTR ptszClassName, __in UINT cchClassNameMax);。它给了我一个指向类名的指针,我只是使用JNA将它映射到char []。复制后我是否需要处理它?<​​/ p>

是否有任何提示和释放/ dealloc / dispose(?)/ delete / free?

[更新]

正如technomage已经指出的那样,这个例子是关于拥有被移交的缓冲区。但一般的问题是我何时必须处理它,什么时候不处理?我可以遵循任何语法或提示吗?

为您提供一个额外的示例,获取一个接口(ISomething)并获取其中一个属性。通常一个双指针(ppVariable),因此它可以写入一个指针值作为操作的结果。有一次,我看到SysFreeString跟进的跟进电话。所以我想在使用它之后我必须释放它。

关于这个的任何想法?如何处理?

此外,我从未见过窗口句柄被处理掉(至少在我的代码中没有)。这有什么规则?

1 个答案:

答案 0 :(得分:0)

您正在将缓冲区传递给本机函数并告知缓冲区的大小。这允许被调用函数将数据复制到缓冲区,而不必担心分配内存。

您已拥有缓冲区,因此适用普通的Java规则。

顺便说一句,如果您需要byte[]使用-A函数,char[]使用-W函数。该“out”参数是使用LPTSTR定义的,因此您需要相应地选择字符串类型。

相关问题