Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sdk 直径x64&;本地自由_Sdk_64 Bit_Dia Sdk - Fatal编程技术网

Sdk 直径x64&;本地自由

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

我正在使用DiaSDK从PDB文件中提取一些信息。我创建了非com DiaSourceAlt对象,因此必须使用LocalFree来释放字符串

下面的代码在x86中运行良好,但在x64上,LocalFree调用会破坏堆

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)”