我没有.NET 4.5来解压缩zip文件,所以我使用Shell32
之类的csc.exe /r:"C:\Windows\System32\shell32.dll" ...
。但是当我像这样引用dll时:
fatal error CS0009: Metadata file 'c:\Windows\System32\shell32.dll' could not be opened -- 'An attempt was made to load
a program with an incorrect format. '
我收到此错误:
csc.exe
更新:如果没有Visual Studio,只需func MusicEventIteratorGetEventInfo(_ inIterator: MusicEventIterator,
_ outTimeStamp: UnsafeMutablePointer<MusicTimeStamp>,
_ outEventType: UnsafeMutablePointer<MusicEventType>,
_ outEventData: UnsafeMutablePointer<UnsafeRawPointer?>,
_ outEventDataSize: UnsafeMutablePointer<UInt32>) -> OSStatus
。
答案 0 :(得分:2)
Shell32是一个可以在C#程序中使用的COM服务器。但是,您必须首先生成一个interop程序集,以将shell32.dll中的类型库(与.NET元数据相同的想法)转换为CLR可以理解的声明。通过running Tlbimp.exe或更简单的方法,在IDE中添加对DLL的引用。
只要您从命令行执行此操作并且不使用msbuild来编译.csproj项目文件,那么您必须执行与msbuild相同的操作,运行tlbimp。对于shell32.dll,这只需要执行一次,您可以在源代码管理中签入互操作库,这样您就不必再这样做了。在互操作库上使用/ r。
使用IDE或MSBuild.exe当然是明智的选择。也帮助您陷入成功之中,真的想要使用嵌入互操作类型功能,因此您不需要在运行时使用互操作程序集,也不必部署它。查看MSBuild生成的构建命令很有用。
答案 1 :(得分:1)