使我的dll与另一个的签名匹配所需的最低要求是什么?

时间:2016-11-08 07:26:06

标签: winapi visual-c++ dll unmanaged

我正在尝试代理一个我没有所有源代码的现有dll。我正在使用我在这里找到的工具:

https://github.com/mavenlin/Dll_Wrapper_Gen

使用它,我能够创建一个Visual Studio项目并成功构建它。但是,在运行原始可执行文件时,它会抛出“badimageFormatException”的异常。在另一个问题上得到了一些无用的评论 - 但没有回答SO之后,我发现了我认为代理dll和原始文件之间的本质区别。

使用corflags.exe工具(来自VS,看起来像dumpbin也有正确的功能,但我无法弄明白),我得到原始的以下输出:

C:\Users\jo\fml2>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\Co
rFlags.exe" fml.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.30729.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v1.1.4322
CLR Header: 2.0
PE        : PE32
CorFlags  : 0
ILONLY    : 0
32BIT     : 0
Signed    : 0

如果我在代理dll上使用相同的工具,我会得到:

corflags : error CF008 : The specified file does not have a valid managed header

我需要将哪些内容添加到我的代码中以使其与之匹配?

1 个答案:

答案 0 :(得分:-2)

这只是一个部分答案,这是不赞成的。

代理DLL项目将其构建为C ++ dll,它与其他dll在同一环境/框架/平台中并不存在。这会导致一些并发症。

但是,如果没有其他更改,可以在Visual Studio中右键单击项目,所需的配置位于打开的对话框的第一个面板上。该小组将分为" General"和#34;项目默认值",以及第六行将是"公共语言运行时支持"。这将有几个选项,但是由于没有来自corflags.exe的元数据,这意味着" No support"选项已被选中。那当然需要改变。

让它包含正确的CLR运行时库/支持是比较棘手的,我还没有想到这一点。

我回答了自己的问题,因为尽管有常客的祝福,他们还没有做任何事情,除了哎呀。我更愿意从实际知道他们正在做什么的人那里获得权威答案。