msi.h在dll中给出了编译错误

时间:2012-05-28 03:40:02

标签: windows visual-c++

我是使用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.cpp没有任何区别,包括StdAfx Header和StdAfx.h文件,这是:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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