我正在尝试代理一个我没有所有源代码的现有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
我需要将哪些内容添加到我的代码中以使其与之匹配?
答案 0 :(得分:-2)
这只是一个部分答案,这是不赞成的。
代理DLL项目将其构建为C ++ dll,它与其他dll在同一环境/框架/平台中并不存在。这会导致一些并发症。
但是,如果没有其他更改,可以在Visual Studio中右键单击项目,所需的配置位于打开的对话框的第一个面板上。该小组将分为" General"和#34;项目默认值",以及第六行将是"公共语言运行时支持"。这将有几个选项,但是由于没有来自corflags.exe的元数据,这意味着" No support"选项已被选中。那当然需要改变。
让它包含正确的CLR运行时库/支持是比较棘手的,我还没有想到这一点。
我回答了自己的问题,因为尽管有常客的祝福,他们还没有做任何事情,除了哎呀。我更愿意从实际知道他们正在做什么的人那里获得权威答案。