尝试在更新的 .Net 版本中调用 x86 .Net 3.5 SDK

问题描述

这可能是一个漫长的过程...我需要创建一个简单的网络应用程序,该应用程序需要调用 OEM 提供的 SDK,该 SDK 已有 10-15 年或更长时间(无法更新)。 SDK 为 32 位,与 .Net Framework 3.5 挂钩。仍然有一个使用 SDK 的有效 NDA,所以我可以分享内容不多。

我可以访问 Visual Studio 2015、2017 和 2019。在每个版本中,我都可以完成创建 C# Web 应用程序的过程,我可以选择 .Net 3.5 作为目标框架,但唯一可用的模板是“空白” “ 一。 3.5 是否有基于 MVC 的模板?我用谷歌搜索过,没有找到。

这是我的第一个问题。我决定继续尝试更新的 .Net 版本,这些版本可能具有更完整的模板集。我最近尝试过 4.8。

使用 .Net 4.8 并指定“x86”平台,我可以创建一个简单的应用程序。我可以调用 SDK 库并从简单的库“get”方法(如“getHeight”、“getWidth”等)中获取值。SDK 适用于仍然像魅力一样工作的旧计算机控制设备。它有一个摄像头,其中一个可用的功能GetCameraimage

SDK 附带文档和一些示例 C#“SLN”。其中之一具有以下示例代码

var idata = new byte[numOfBytes];
unsafe {
    fixed (byte* fixedPtr = idata) {
        channel.GetCameraimage((int) numOfBytes,out idata[0]);
    }
}

在我的代码中,上面只是因为“访问冲突”而崩溃。调试器中不会抛出任何异常。它只是死了。

SDK 附带的文档表明以下内容有效:

var idata = new byte[numOfBytes];
channel.GetCameraimage((int) numOfBytes,out idata[0]);

但我遇到了同样的访问冲突。

对访问冲突有什么想法吗?

编辑

@Serg:解决几个评论var idata = new byte[numOfBytes*3] 没有用,但是是个好主意。

@DekuDesu:我不确定如何准确验证内存是否已分配,因此我执行了以下操作:

var idata = new byte[numOfBytes];
for (var i=0;i<numOfBytes;i++) {
    idata[1] += 0;
}
channel.GetCameraimage((int) numOfBytes,out idata[0]);

我也用@Serg 的抵消想法尝试了这个,并且违规肯定是由 GetCameraimage 调用触发的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)