Sdk 直径x64&;本地自由
我正在使用DiaSDK从PDB文件中提取一些信息。我创建了非com DiaSourceAlt对象,因此必须使用LocalFree来释放字符串 下面的代码在x86中运行良好,但在x64上,LocalFree调用会破坏堆Sdk 直径x64&;本地自由,sdk,64-bit,dia-sdk,Sdk,64 Bit,Dia Sdk,我正在使用DiaSDK从PDB文件中提取一些信息。我创建了非com DiaSourceAlt对象,因此必须使用LocalFree来释放字符串 下面的代码在x86中运行良好,但在x64上,LocalFree调用会破坏堆 IDiaSymbol *lpSymbol; BSTR bStrName; ... hRes = lpSymbol->get_undecoratedNameEx(0x87FE, &bStrName); if (SUCCEDED(hRes)) LocalFree(b
IDiaSymbol *lpSymbol;
BSTR bStrName;
...
hRes = lpSymbol->get_undecoratedNameEx(0x87FE, &bStrName);
if (SUCCEDED(hRes))
LocalFree(bStrName);
有什么建议吗?(我正在使用msdia90.dll)
问候,,
Mauro。在做了一些反向工程之后,我发现必须通过“(LPBYTE)bstr-4”,因为msdia##.dll使用LocalAlloc进行分配,并在将数据返回给用户之前将指针递增4 我认为这种行为是为了模拟BSTR,它将字符串的长度存储在指针指向的地址之前的DWORD中。我使用x64版本发现了这个问题。在x86中,虽然有同样的问题,但应用程序不会崩溃,而是会产生泄漏
问候。使用指针时一定要小心。 LocalAlloc将指针增加4个字节。 BSTR大小是word,所以您只能执行“LocalFree(BSTR-2)”