问题标签 [unmanagedexports]

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 投票
2 回答
3293 浏览

c# - DllExportAppDomainIsolatedTask 在构建 DLL 时意外失败

我正在尝试在 Visual Studio 中用 C# 构建 Dll。使用了 NuGet RGiesecke.DllExport。但是由于某种原因,它在构建 Dll 时会返回一些错误。下面是描述。

错误
“DllExportAppDomainIsolatedTask”任务意外失败。System.ArgumentException:未找到请求的值“Version46”。

服务器堆栈跟踪:

0 投票
2 回答
468 浏览

c# - 如何将 C++ 非托管 DLL 转换为 C#

我在 C++ 中有非托管 dll,它工作正常,我尝试用 C# 重新实现它,但出现以下错误:

System.ArgumentException : 值不在预期范围内

ExceptionMethod:8
ConvertToNative
mscorlib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
System.StubHelpers.ObjectMarshaler
Void ConvertToNative(System.Object,IntPtr)

H结果:-2147024809

来源:mscorlib

C++代码如下:

然后在 C# 中翻译如下:

更新:

0 投票
1 回答
302 浏览

c# - C# 中的 PortableDeviceManagerClass 无法初始化

我有 ac# 库,它提供了一些将数据上传到连接(android)设备的功能。dll 本身通过UnmangedExports导出以供 delphi 应用程序使用。

这是由 delphi 应用程序调用的函数:

这是 PortableDeviceCollection 类:

我可以使用 Visual Studio 创建 dll 并在 delphi 应用程序中使用它。当 delphi 应用程序调用该getDevices()函数时,我在 PortableDeviceCollection 类的实例化时遇到错误:

未找到文件或程序集“Interop.PortableDeviceApiLib,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null”或其依赖项。程序集由比当前加载的运行时更新且无法加载的运行时创建。

ProductXY.PortableDeviceCollection..ctor()
ProductXY.ProductXYMain.getDevices()

c# 项目的目标框架设置为.Net Framework 4. 当我尝试编译项目时,使用任何较低版本都会出错:

无法解析主要引用“Interop.PortableDeviceApiLib”,因为它间接依赖于 .NET Framework 程序集“mscorlib,版本 = 4.0.0.0,文化 = 中性,PublicKeyToken = b77a5c561934e089”,它是更高的版本 4.0.0.0高于当前目标框架中的 2.0.0.0 版本。

请注意。我既没有写过 c# 库也没有写过 delphi 应用程序。两人合作多年。现在我必须向 c# 库添加一个功能。我没有在项目中添加任何代码。我只是尝试再次编译它并使用 dll。我唯一做的就是通过 NuGet Packetmanager 更新 RGiesecke.DLLExport.Metadata。没有更新我得到一个错误

“Microsoft.Build.Utilities.ToolLocationHelper 找不到 ildasm.exe”

我知道这个在 C# 中枚举 Windows 便携式设备的问题。但是在达到问题所涉及的代码之前,我的错误就被抛出了。我仍然尝试了该问题的解决方案,但是答案中描述的操作(在 dll 中解组合、查找和替换)已经完成(否则我的代码将无法编译)。

错误消息对我来说没有意义。Interop.PortableDeviceApiLib是一个 COM-Lib,无法在不同的框架版本中下载。我想我在这里遗漏了一些东西。

谁能帮我?

0 投票
0 回答
63 浏览

c# - 调用 C# DLL 并从 Inno 设置脚本返回带有非托管导出的字符串

我试图在安装过程中调用 C# dll 来修改我的应用程序的 json 配置文件。

我在 StackOverflow 上找到了几篇关于此的帖子,但它们与更旧的版本有关。不幸的是,他们都没有为我工作。对于 DLL,我使用了 Inno 附带的示例 C# 项目并添加了我的方法。除了添加我的方法之外,我没有以任何其他方式修改项目或解决方案。对于 Inno 项目,我从头开始创建了一个应用程序。
版本号:
Inno Setup 6.0.3
C#:Framework 4.5

C# 片段:

英诺项目:

Inno 编译正确。在安装过程中,我确实收到弹出消息“Hello from CallTest”,但随后收到错误消息“第 32 行:无法调用 proc”。第 32 行是我们调用 Test 函数的地方,我们将返回值设置为前面定义的 Integer。虽然我们正在调用一个方法(而不是一个过程)并且我查看了 DLL 的返回类型,但我无法弄清楚为什么会出现此错误。任何帮助,将不胜感激。

0 投票
1 回答
262 浏览

c# - 从非托管 C# DLL 返回列表/数组

我有非托管 C# DLL:

我想List<StudentsStruct>从函数中返回。

我想在 C++ 应用程序中运行上面的函数:

MaxElement() 函数运行良好,因为它返回一个 int。但我想将“StudentsStruct”的列表/数组从 C# 返回到 C++。

0 投票
1 回答
296 浏览

c# - 在非托管 C# .NET 库项目中使用 NuGet 库

我正在为一个名为 BIM Vision 的软件创建插件。他们有一个围绕 C API 的包装器,因此我使用 UnmanagedExports 让我的非托管 DLL 用包装器编译得很好。

问题是我根本无法在我的项目中使用 NuGet 库。它们编译得很好,但是在我的代码中调用它们的任何函数都会使软件崩溃。

所有的库都与我自己的 DLL 一起编译在它们自己单独的 DLL 中。软件只能加载我的 DLL(因为其他 DLL 缺少与 BIMVision 对话的代码)

如何让软件找到丢失的 DLL?我应该把它们放在哪里?

我的 .csproj 看起来像这样:

设法使用调试器从软件中获取真正的异常:

0 投票
0 回答
35 浏览

c++ - 使用 /clr:netcore 从非托管 C++ 调用 .dll 构建

我有一个非托管 C++ 应用程序,它通过供应商 DLL 连接到不同的数据源。对于 .Net 框架 DLL,我曾经创建 /clr 项目,它对我有用,没有任何问题。

但是现在我需要使用 .Net 5 DLL,并且不能让它这样工作。要混合非托管代码和 .net 5 代码,我必须使用仅作为 DLL 构建的 /clr:netcore,但我的应用程序应该是 Windows 服务,因此我使用 /clr:netcore 为供应商创建了一个包装 DLL .Net 5 DLL少数导出的方法(非托管)。使用 .def 文件指定导出的方法。

在这个包装器中,CreateClient 创建了一个在供应商的 DLL 中定义的对象的实例,因此我可以稍后在其他方法中使用它。SetCallback 设置数据准备好时调用的回调,没什么特别的。

编译 Wrapper.dll 得到 .lib 和 .dll 文件 - 到目前为止一切都很好。

然后我尝试将我的非托管应用程序与该 Wrapper.dll 链接(使用头文件和 .lib)。一切都编译得很好......但是当我尝试启动/调试我的应用程序时,我收到一个错误“找不到依赖的 dll”。

所有 .lib/.dll/.exe 都在同一个目录中。如果我使用 DependancyWalker 打开 .exe - 它说它也找不到 wrapper.dll(为什么?)如果我直接在 DependancyWalker 中打开 wrapper.dll - 它会显示并且我所有导出的方法都在那里。

那么我需要做什么才能完成这项工作?还是无法以这种方式从非托管 c++ 中使用 .net 5.0 DLL?

0 投票
1 回答
86 浏览

c# - 在 VBA 中使用 UnmanagedExports 包 [DllExport] 调用 C# DLL 触发“找不到 DLL 入口点”错误

我正在使用Robert Giesecke 的Unmanaged Exports 包来访问 Excel VBA 中的 c# dll。我遵循了几个示例并继续得到运行时错误 453:“在 myDllName.dll 中找不到入口点 MyDLLFunction”

我在使用 64 位 Excel 的 64 位机器上,并且正在为 x64 打包 dll。

我在 Visual Studio 2022 中工作,并尝试在 .NET 6.0 和 .Net Framework 4.7.2 中准备 dll。

这是我的导出类:

然后这是我的另一个 C#:

在 Excel VBA 中:

我按照这个例子,但它不工作。

我已经用谷歌搜索并测试了各种配置,但无法通过错误“找不到入口点”。

0 投票
1 回答
51 浏览

c# - 使用 await 调用 C# DLL http.client.GetAsync(uri) 会导致 SEHException

我正在从不同的语言调用 c# dll 非托管方法。我设置了回调,所以当 c# dll 完成时,我的应用程序会通过它获得结果。

这会在 .Invoke 上导致 SEHException:

这不会:

这是 Invoke 上发生的异常:

这是 c# dll 的全部主要代码:

Clarion 中用于调用 c# dll 的原型:

来电:

Clarion 中的回调过程(由 C# 中的 Invoke 回调):

我不精通C#,但为什么会这样?有没有等待客户仍然有效的解决方法?我更喜欢我的应用程序在 c# dll 下载文件时保持响应。在没有“等待”客户端的情况下,我的应用程序在下载时锁定...

谢谢你。

0 投票
0 回答
14 浏览

c# - UnmanagedExports.Repack 和 UnmanagedExports.Repack.Upgrade 有什么区别?

因此,我正在研究如何从 C# 导出非托管 .dll,并为 Robert Giesecke 的UnmanagedExports包找到了很多建议。

然后我将它安装到我的 SDK 风格项目中。它没有用。

然后我了解到我应该使用UnmanagedExports.Repack包,因为它支持PackageReference.

但后来我看到另一个名为UnmanagedExports.Repack.Upgradewhich 声明的包...and additionally upgraded the Microsoft Build Utilities (using Nuget package Microsoft.Build.Utilities).

我现在还不清楚哪个包会被用作“好”包。