代码之家  ›  专栏  ›  技术社区  ›  probably at the beach

C获取非托管dll的版本

  •  2
  • probably at the beach  · 技术社区  · 14 年前

    我从我的托管C代码调用一个非托管DLL,并想检查我调用的是正确的版本。

    我试图加载程序集(然后获取资源文件,然后获取版本)的代码是: cur_version=assembly.loadfile(“x:\workspace\yreceipts\yrprintprocessor\debug\yrprintprocessor.dll”); 由于这个错误,它失败了: The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)

    是否有人知道如何绕过这个问题,或者有更好的方法从托管C代码检查非托管DLL的版本?

    事先谢谢, 理查德

    2 回复  |  直到 14 年前
        1
  •  7
  •   quintindk    14 年前

    如logicnp所述;assembly.load仅用于托管程序集。要确定任何版本的ED文件的版本,可以使用System.Diagnostics.FileVersionInfo.GetVersionInfo(文件名)并在DLL中加载和调用非托管过程,可以参考以下文章:

    http://blogs.msdn.com/jonathanswift/archive/2006/10/02/780637.aspx http://blogs.msdn.com/jonathanswift/archive/2006/10/03/Dynamically-calling-an-unmanaged-dll-from-.NET-_2800_C_23002900_.aspx

    祝你好运。。。

        2
  •  4
  •   logicnp    14 年前

    失败的原因是因为无法使用assembly.load加载未托管的dll。见大卫布朗建议的链接。

    推荐文章