gpt4 book ai didi

c++ - Installer::OpenDatabase() 使用 msiOpenDatabaseModeTransact 产生类型错误

转载 作者:行者123 更新时间:2023-11-30 03:12:48 25 4
gpt4 key购买 nike

以下代码产生错误 hr=0x80020005(错误类型)。

#import <msi.dll>
using namespace WindowsInstaller;
main()
{
::CoInitialize(NULL);
InstallerPtr pInstaller("WindowsInstaller.Installer");
DatabasePtr pDB = pInstaller->OpenDatabase(
"c:\\foo\\bar.msi",
msiOpenDatabaseModeTransact);
}

我认为原因是在幕后,有 MsiOpenDatabase(),它将 LPCTSTR 作为第二个参数。第二个参数可以是 MSIDBOPEN_TRANSACT 其定义是

#define MSIDBOPEN_TRANSACT     (LPCTSTR)1

我不知道是否可以给出一个具有良好内部类型的变体作为第二个参数。 _variant_t 构造函数做了很多检查,所以我不能伪装成一个 int一个 char* 很容易。

有没有人试过在C++中使用这个方法?

编辑:

我的 msi.dll 版本是 3.1.4000.2805,我的系统是 XP SP 2,代码应该可以在任何装有 XP 或 Vista 的机器上运行。

欢迎访问 MSDN 文章的 URL。

在同一台机器上,对低级等价物的调用:

MsiOpenDatabase("c:\\foo\\bar.msi", MSIDBOPEN_TRANSACT);

完美运行。

最佳答案

我终于在msdn forums上得到了答案

DatabasePtr pDB = pInstaller->OpenDatabase(
"c:\\foo\\bar.msi",
(long)msiOpenDatabaseModeTransact);

关于c++ - Installer::OpenDatabase() 使用 msiOpenDatabaseModeTransact 产生类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com