0

我知道预处理器指令在这里是合适的,基于这个问题: Preprocessor directive in C# for importing based on platform

一个简单的复制粘贴

#if WIN64
    [DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)]
#else
    [DllImport("ZLIB32.dll", CallingConvention = CallingConvention.Cdecl)]
#endif

在我的命名空间的开头没有工作,因为 Visual Studio 抱怨说

属性“DLLImport”在此声明类型上无效。它仅对“方法”声明有效

但是,更改#else行以#elif WIN32使其编译。

我如何将基于操作系统加载不同 DLL 的技术Microsoft.Office.Interop.Excel应用于版本 11 与版本 12 的特定情况?

4

1 回答 1

1

如果您想在编译时链接到一个特定版本(如您的示例所示) - 您需要有 2 个项目,这些项目将包含不同版本的 Interop 程序集并引用同一组源文件。

如果您想在运行时执行此操作并使用强类型对象,您需要包装您感兴趣的方法并通过您的自定义类/接口公开它们,因为互操作程序集不共享任何基类(兄弟而不是 11如您所愿,是 12 岁的父母)。

于 2012-09-28T16:23:09.307 回答