Visual Studio 但是我不想在我的COM库中使用.lib或.exp文件!

rwqw0loc  于 2023-02-16  发布在  其他
关注(0)|答案(6)|浏览(301)

当用VisualStudio生成COM dll时,我 * 真正 * 需要的是要从dll本身导出的DllCanUnloadNow符号(和三个相关的符号)。* 没有人 * 会链接到我的库,所以我对. lib文件和. exp文件(根本)不感兴趣。
但是,我无法禁止创建这些文件。(注意:我知道如何在构建后的步骤中删除它们)
以下是我的链接器参数:

/OUT:"u:/cada-nt/bin/PData.dll" 
/INCREMENTAL:NO 
/NOLOGO 
/DLL 
/MANIFEST:NO 
/DEF:"PData.def" 
/DEBUG 
/PDB:"u:/cada-nt/pdb/PData.pdb" 
/ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
                    advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
                    odbc32.lib odbccp32.lib

问题是:

  • 有人成功地 * 不 * 生成. lib和. exp文件吗?
  • 有人知道 * 为什么 * 生成这些文件吗?
x33g5p2x

x33g5p2x1#

Visual Studio的链接器有一个/IMPLIB选项,允许您指定.lib.exp文件的输出位置。
可以在项目属性中修改此选项:

Configuration Properties > Linker > Advanced > Import Library

例如,您可以将其设置为:

$(Configuration)\$(TargetName).lib

链接器将创建与.lib同名的.exp文件。

ycl3bljg

ycl3bljg2#

COM库中有一些函数声明为__declspec(dllexport),这意味着它们被导出(可能被GetProcAdress函数使用),linker认为有必要链接这个动态库(不管是exe还是dll --一般结构都是一样的),并创建了 *.lib和 *.exp文件。
要避免创建这些文件,您需要从函数声明中删除所有__declspec(dllexport)

pbgvytdp

pbgvytdp3#

/NOIMPLIB将阻止生成.lib文件。我不知道如何避免.exp文件。

jhdbpxl9

jhdbpxl94#

不确定如何关闭它们,但可以执行生成后步骤来移除它们,如下所示:

del $(OutDir)\$(ProjectName).lib
del $(OutDir)\$(ProjectName).exp

(on VS 2008是[项目]-〉[属性],然后是配置属性-〉生成事件-〉生成后事件)
(note我知道你知道如何做到这一点,但这个答案可能会帮助下一个谷歌人...)

6rqinv9w

6rqinv9w5#

我想您可以挂接kernel32.dllCreateFile/WriteFile/CloseHandle,然后将其直接重定向到nul

bxfogqkk

bxfogqkk6#

为什么生成这些文件是一个问题?当然,如果人们不打算直接链接到它们,你需要做的就是不分发这些文件,而只是分发DLL。

相关问题