2017-03-17 77 views
0

我没有问题,通过使用动态链接调用C++从C#DLL函数,但有问题,当我试图让它在动态的方式:调用导出的函数

试图让DLL处理程序:

var DLL = Assembly.LoadFile(@"C:\project\mydll.dll"); 

,并得到例外:

型 'System.BadImageFormatException' 未处理的异常出现在mscorlib.dll

附加信息:该模块应包含程序集清单。 (来自HRESULT的例外:0x80131018)

如何解决此问题?

+0

32/64位问题?管理与非管理问题?是否阅读过[P/Invoke](https://en.wikipedia.org/wiki/Platform_Invocation_Services)? –

回答

0

Assembly.LoadFile应该只用于加载.NET程序集。 Pure Win32 dll无法以这种方式加载。

为了在托管代码中加载Win32库,请使用LoadLibrary Win32通过PInvoke调用。

1

Assembly.LoadFile用于加载.NET程序集,它不能加载不包含程序集的DLL。

您将需要使用PInvoke来访问DLL中的函数。此外,还需要确保导出函数的名称没有被破坏,因为几乎不可能计算出函数名是什么,并且在使用不同版本的C++编译器构建时名称可能会更改。

+0

也许他会用[C++编写.NET程序集](https://en.wikipedia.org/wiki/C%2B%2B/CLI)? –

+1

@UweKeim问题中没有'C++/CLI'标签:-) – xanatos