「VS ATL的exe模板无法生成dll的解决方案」封面图
· 2 分钟阅读

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

ATL解决方案

问题

报错信息:

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

提示信息:

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 TB
打开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

修改预构建事件

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
项目属性-->链接器
链接器-->输入
输入-->模块定义文件
模块定义文件-->输入../ATLProject1/ATLProject1PS.def

相关文章

评论