VS ATL的exe模板无法生成dll的解决方案

问题

报错信息:

1
EXEC : error : MIDL will not generate DLLDATA.C unless you have at least 1 interface in the main project.

提示信息:

1
2
3
4
if exist dlldata.c goto :END
echo Error: MIDL will not generate DLLDATA.C unless you have at least 1 interface in the main project.
Exit 1
:END

操作过程


graph TD
打开VS-->新建ATL项目
新建ATL项目-->选择生成.exe项目
选择生成.exe项目-->产生ATLProject1和ATLProject1PS两个工程
产生ATLProject1和ATLProject1PS两个工程-->运行ATLProject1PS工程
运行ATLProject1PS工程-->提示报错

错误原因

看似是说没有留接口,但是反过来仔细一想,VS 自带的模板应该不会这么麻烦,应该会自动生成才对,因此错误并不可能是接口问题。

再注意提示信息if exist,这很明显就是一个生成前事件,因此如果修改dlldata.c文件位置就应该能解决问题。

代理/存根(PS)项目有一个预构建事件,用于检查dlldata.c的存在。但是,由于此文件与代理/存根项目.vcxproj不在同一文件夹中,因此找不到该文件。更改所有配置/平台的 Pre-Build 事件,以便它在父文件夹中查找dlldata.c

其次在链接代理/存根项目时,由于相同的原因,链接器将找不到ATLProject1ps.def,因为它位于ATLProject1文件夹中。

解决方法

setp one

修改预构建事件

1
2
3
4
if exist ../ATLProject1/dlldata.c goto :END
echo Error: MIDL will not generate DLLDATA.C unless you have at least 1 interface in the main project.
Exit 1
:END

setp two

修改模块定义文件的位置


graph TB
A(项目属性)-->B(链接器)
B-->C(输入)
C-->D(模块定义文件)
D-->E(输入../ATLProject1/ATLProject1PS.def)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!