2

我是使用 DLL 的新手。虽然我在 Linux 上做过一些严肃的 C++ 编程并且知道 DLL 是什么。我需要使用自定义操作编写 Windows 安装程序。为此,我在 Visual Studio 2010 中创建了一个新的 DLL 项目。当我尝试在 StdAfx.h 文件中包含 msi.h 时,出现以下错误:

1>------ Build started: Project: CustomAction, Configuration: Debug Win32 ------
1>  DllEntry.cpp
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\msi.h(86): error C2146: syntax error : missing ';' before identifier 'WINAPI'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\msi.h(86): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\msi.h(86): error C2146: syntax error : missing ';' before identifier 'MsiCloseHandle'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\msi.h(86): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
......................

该项目除了包含 StdAfx Header 和 StdAfx.h 文件的 StdAfx.cpp 之外什么都没有,它是:

#include   <msi.h>
#include   <msiquery.h>
#include   <stdio.h>

我尝试在项目的链接器输入属性中添加 msi.lib 的路径。它没有用。我还尝试添加到 lib 文件夹的路径,包括 windows sdk 目录的文件夹和 bin 文件夹,这也不起作用。造成这种情况的原因是什么,以及是否有人可以向我提供有关在 Windows 安装程序中使用自定义操作的任何教程,因为我是该领域的新手。

4

1 回答 1

4

看起来<msi.h>取决于WINAPI宏。因此,您可能需要首先包括<windows.h>

#include <windows.h>
#include <msi.h>

使用 DLL 时,头文件没有什么特别之处。头文件的工作方式与您已经习惯的方式相同。

于 2012-05-28T03:43:20.153 回答