【发布时间】:2013-12-04 13:12:31
【问题描述】:
我的应用程序中有一个 P/Invoke 调用,它通过用 C++ 编写的 API(一个 .dll 文件)与外部硬件进行通信
在我安装了最新的 .Net 4.5.1 之前,此方法运行良好,并且在不进行任何代码更改的情况下,它现在会引发异常:“无法将类型 'void' 隐式转换为 'object'”
我应该检查什么以使我的应用程序与 .Net 4.5.1 兼容?回滚到以前的框架是我发现使它工作的唯一方法!
[DllImport("TestAPI", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
internal static extern bool OMBOpen(int VID, int PID, int CID,
StringBuilder description,
int bufferSize);
C++中方法的原生声明
TESTAPI_API
bool OMBOpen(int VID,int PID,int IID,char* buffer,int bufferSize);
编辑:
最终,问题根本不在于上述方法调用本身,而在于将数据从指向数据结构的指针编组(参见接受的答案),正如 David Heffernan wiseley 所怀疑的那样,这在代码的其他地方.
【问题讨论】:
-
尝试“TestAPI.dll”而不是“TestAPI”
-
@thefiloe 不高兴,但谢谢..
-
你能显示函数的原生声明吗?
-
Cannot implicitly convert type 'void' to 'object'"这不是运行时错误,而是编译器错误消息。 -
我来自 Microsoft .NET Framework 团队。您能否向我发送适用于 .NET4.5 但不适用于 .NET 4.5.1 的详细重现代码,我想调查一下。将它发送到 Microsoft com 的 netfx45compat 谢谢!