问题标签 [interopservices]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
338 浏览

c# - 将 float* 从 Objective C 发送到 C#

我正在制作一个 Unity 项目并尝试将在 iPhone 上float* array收到的内容发送到Unity 项目。BLE (BlueTooth)C# code

那些从 C# 发起到 C++ 端以通过传递数组来接收数据的函数调用是很常见的。但是在这里,当接收到数据时,这个数据传输是从 Objective 端到 C# 的。

我使用插件来连接 C#。

Objective C身边有

BLEObject.h, BLEObject.m, UnityBridge.h and UnityBridge.mm. UnityBridge 是与 C# 接口的 C++ 代码。

UnityBridge.h 有

UnityBridge.mm 有

BLEObject.h 有

BLEObject.m 有

BLE, I call [BLEObject sendMessage:floatArray]当我从Objective C 端接收数据时。

然后在 C# 方面,

然后我将 CallMethod 实现为

实际上这段代码不起作用,但这是我喜欢实现的流程。我该如何实施?

0 投票
4 回答
31210 浏览

c# - 无法加载文件或程序集'System.Runtime.InteropServices.RuntimeInformation

每当我尝试使用应用程序洞察力和实体框架运行 webjob 项目时,我都会收到此错误。

System.IO.FileLoadException:'无法加载文件或程序集'System.Runtime.InteropServices.RuntimeInformation,Version=0.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)'

我已经安装了以下 nuget 包

Microsoft.Azure.WebJobs.Logging.ApplicationInsights 版本 2.1.0-beta4

Microsoft.Extensions.Logging 版本 2.0.0

Microsoft.Extensions.Logging.Console 版本 2.0.0。

这一切都适用于一个新的 Visual Studio 2017 webjob 项目,当我尝试包含现有代码库时,主要使用实体框架,我得到了这个错误。当我查看有效的参考时,我没有 System.Runtime.InteropServices.RuntimeInformation,但它已通过实体框架添加到项目中。它似乎是 .net 标准的一部分,但我的新控制台应用程序为什么不需要 .net 标准!

在此处输入图像描述

我不确定它为什么要寻找版本 0.0.0.0,因为我拥有的是 4.0.2.0

我也尝试将其添加到项目文件中,但这不起作用。

任何帮助将不胜感激

非常感谢

0 投票
0 回答
839 浏览

c# - '无效的 FORMATETC 结构' C# 拖放时

当拖动操作开始时,我正在尝试将 dataObject 的数据转换为 CF_HDROP 格式。我能够读取我将在某个时候存储的 byteArray,但现在我正在硬编码驱动器上实际存在的文件的路径。

我使用了这个C# 拖放问题作为参考。

这是我对 OleDragEnter 函数的实现:

我不断收到“无效的 FORMATETC 结构”错误:

我尝试在非调试模式下运行应用程序并验证文件的完整性。我注意到 DATADIR.DATADIR_SET 不返回任何可用的格式。这可能是问题吗?

编辑:当我尝试使用相同的 formatEtc 对象和 stgMedium 对象来读取数据而不做任何更改时,似乎也会发生这种情况。

0 投票
1 回答
1402 浏览

c# - user32.dll 是 msdn 所说的“WinApi”吗?

在下面的代码中,

我搜索了 user32.dll 的“mouse_event”函数,得到了这个。导入 user32.dll 是否等同于引用Win32 API,使所述文档成为其他函数及其参数信息的有效资源?为什么“c#”中的“user32.dll”会带有在其他地方一致称为“WINAPI”或“WIN32”的函数名称?

0 投票
0 回答
38 浏览

cntk - 我应该如何从 C# 调用 Cntk.Core-2.5.dll?

我无法从 C# 调用 Cntk 函数。我使用的头文件是来自二进制 CNTK 安装的 CNTKLibraryC.h,我加载的 DLL 是来自同一安装的 Cntk.Core-2.5.dll。我目前对 CNTK_LoadModel 的互操作签名:

[DllImport(DllName, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr CNTK_LoadModel( IntPtr modelFilePath, IntPtr device, out IntPtr model);

如果我对和都使用模型文件名(贯穿Marshal.StringToHGlobalUni()),则此“有效” ,但之后我无法调用程序崩溃。有时,如果我将不存在的路径传递给 ,我也会成功,因此很明显,第二个参数被用作模型文件名,这与函数签名所暗示的相反。我怀疑我在这里忽略了一些东西。我不习惯从 C# 调用本机 64 位 DLL,只有 32 位。例如,正确的调用约定是什么?modelFilePathdeviceCNTK_ReleaseModelmodelFilePath

0 投票
1 回答
528 浏览

c# - 本机 dll 中的动态内存分配

我有一个用 C++ 编写的本机(非托管).dll,它将从托管进程(C# 程序)中调用。在调试 dll 时,我发现的问题是,当我在 dll 中使用关键字创建对象时,new出现系统访问冲突异常。这仅在从托管进程调用 dll 时出现,而不是在我从另一个本机程序调用它时出现。

代码与此类似:

和 C# 代码:

我知道这与试图在允许的内存空间之外分配内存的本机进程有关。它仅在分配内存时发生new(至少在这个项目中),不幸的是我确实需要使用它。我的问题是:有谁知道为什么会导致异常以及如何避免它?

0 投票
1 回答
258 浏览

c# - 斑马打印机:System.Runtime.InteropServices.COMException (0x8004FFFF)

我们使用以下代码打印到卡片。

它可以在我们的开发机器上运行,但是当我们移动到另一个测试环境时,我们会收到以下错误:

0 投票
1 回答
412 浏览

c# - 在 C# 中将色阶应用于 Excel 范围

我正在尝试将色阶应用于 excel 范围。我下面的代码片段几乎可以满足我的要求,将最高单元格格式化为红色,将最低单元格格式化为黑色,并缩放其间的单元格,但我想让它根据单元格的值应用颜色比例,使用值为 0 的单元格为黑色,值为 255 的单元格为红色。使用当前代码,只有当最高单元格正好是 255 并且最低单元格正好是 0 时才会发生这种情况。任何其他最大和最小单元格值都会影响色标。如何应用色阶来引用这些静态值?任何帮助表示赞赏!

0 投票
0 回答
582 浏览

c# - 用什么代替 SafeHandle.DangerousGetHandle?

I was looking at my SonarQube static code analysis and came across a report that says using a SafeTokenHandle DangerousGetHandle method call.

I start by declaring a SafeTokenHandle:

检查它对我的登录方法的返回值。

Use a basic "using" which I log the value of the SafeTokenValue:

然后我有另一个 using 使用“DangerousGetHandle”方法设置一个新的 WindowsItentity:

有没有办法在不使用“DangerousGetHandle”方法的情况下继续获取该信息,还是我只需要接受这方面的风险?

微软表示:“DangerousGetHandle 方法可能带来安全风险”主要是因为引用变得陈旧,这可能导致它访问敏感信息。

看起来使用DangerousAddRefDangerousRelease是微软的建议,但这些似乎也有风险。任何方向都会有所帮助。

0 投票
0 回答
59 浏览

c# - 如何在不暂停代码的情况下在 PrintPreview 中打开 Excel 文件

我是 C#/OpenXML 新手,找不到答案。如果这是一个愚蠢的问题,请提前道歉......基本上,我正在编写一个从输入字符串创建 Excel 文件的应用程序。此输入字符串可能包含有关需要在打印预览对话框中同时创建和打开的多个文件的信息。但是,使用以下函数,代码在 printpreview.show() 方法上暂停,因为它等待用户关闭预览。

如何避免这种情况并确保窗口在打印预览中保持打开状态但我的程序继续运行并创建/显示更多文件?