我正在尝试为Go创建一个Windows MMDevice API的瘦包装器,我遇到了有关字符串的Windows数据类型的问题。 根据{{3}}的文档,它采用以下参数:
HRESULT GetId(
[out] LPWSTR *ppstrId
);
这是我的Go代码,对应于上面的方法。 (IMMDevice::GetId method)
func getId(mmd *IMMDevice, strId *uint16) (err error) {
hr, _, _ := syscall.Syscall(
mmd.VTable().GetId,
2,
uintptr(unsafe.Pointer(mmd)),
uintptr(unsafe.Pointer(strId)),
0)
// ...
}
我的理解是LPWSTR是指向uint16值数组的指针,但它会导致无效的指针错误。 在这种情况下我应该使用什么类型?感谢。
答案 0 :(得分:0)
要做的第一件事是阅读Windows功能的文档。
HRESULT GetId( [out] LPWSTR *ppstrId );
参数
ppstrId
[out]指向该方法写入地址的指针变量的指针 包含端点的以null结尾的宽字符串的示例 设备编号。该方法为字符串分配存储空间。呼叫者,召集者 当不再需要时,负责释放存储空间 通过调用CoTaskMemFree函数。如果GetId调用失败, * ppstrId为NULL。有关CoTaskMemFree的信息,请参阅Windows SDK文档。
返回值
如果方法成功,则返回S_OK。如果失败,可能会返回 代码包括但不限于显示的值 下表。
特别是,“ppstrId [out]指向指针变量的指针......”当我希望你有strId *uint16
或{{1}时,你有*pstrId
或strId **uint16
}。