问题标签 [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 投票
1 回答
3959 浏览

c# - UnmanagedExports 错误“RGiesecke.DllExport.MSBuild.DllExportAppDomainIsolatedTask”

我在使用 Visual Studio 2017 编译 DLL 项目时遇到问题:

我在包管理器控制台上做了“Install-Package UnmanagedExports”...

错误:

无法从程序集 C:\Users\Tom\Desktop\CSharpProjects\MSBuildDLL\MSBuildDLL\packages\UnmanagedExports.1.2.7\tools\RGiesecke.DllExport.MSBuild.dll 加载“RGiesecke.DllExport.MSBuild.DllExportAppDomainIsolatedTask”任务. 无法加载文件或程序集 'RGiesecke.DllExport,Version=1.6.0.1449,Culture=neutral,PublicKeyToken=479f08790debacee' 或其依赖项之一。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项都可用,并且任务包含实现 Microsoft.Build.Framework.ITask 的公共类。

我在 Visual Studio 2013 上编译了完全相同的代码,它工作得很好,但不幸的是它在 VS 2017 上不起作用。我到处搜索这个问题的解决方案,但没有找到任何解决问题的方法。

C# 代码:

0 投票
0 回答
1069 浏览

c# - c# 4.7.2 在调试和从本机启动时在 clr.dll 中崩溃

我有一个混合模式项目,我在其中启动本机 c++ 代码并加载和使用少量 c# 4.7.2 程序集。它工作了很长时间,但我偶然发现了一个问题。仅 C# 单元测试工作正常。当禁用混合模式调试时,C++ 仅单元测试调用托管工作正常。当我启用混合模式调试时,我可以从 native do manage 开始进行调试会话,但是当我进入一些特定的代码时,我得到一个 clr.dll 崩溃,地址 0 上存在访问冲突:

server_unittests.exe 中的 0x00007FFAF53A2774 (clr.dll) 引发异常:0xC0000005:访问冲突读取位置 0x0000000000000000

它是确定性的,并且在从派生类调用基构造函数时发生。

代码有效,没有泄漏或任何东西,可以调试,但是当会话从非托管启动时会死掉。它看起来大致是这样的:

并在它应该进入基类构造函数代码时立即崩溃。

对于 man-unman 桥,我使用 3F/DllExport 项目。我有最新的vs 2017。

请帮我找到导致它崩溃的模式或将我指向一些 GUI 配置,这使它消失:)

在一些选项旋转之后,它开始抛出一个不同的错误:

托管调试助手“FatalExecutionEngineError”在“server_unittests.exe”中检测到问题。附加信息:运行时遇到致命错误。错误地址位于线程 0x1a6c 上的 0xf53a2774。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。

0 投票
1 回答
443 浏览

c# - 使用非托管导出将字符串从 C# 返回到 C++ 返回数字

我在 C# 中有一个函数,我使用Unmanaged Exports从 C++ 调用它。传递的字符串在 C# 中被正确接收,但在 C++ 中返回的字符串显示为 5073480 之类的数字。这里可能有什么问题?我需要在 C++ 中取回字符串。以下是代码

C++ 代码:

C#代码:

0 投票
1 回答
489 浏览

c# - 表单未显示在凭据提供程序中

我在 C# 中有一个显示表单的函数。我已经使用 Unmanaged Exports 公开了该函数,并在命令链接上的凭据提供程序示例中从 C++ 调用它。表单不显示(没有任何反应)。但是,当我使用 C++ 控制台应用程序调用相同的 C# 表单时,该表单显示没有任何问题。C++ 控制台应用程序正在加载它但 C++ 凭据提供程序代码没有加载它可能有什么区别?

C++ 代码:

C#代码:

0 投票
0 回答
64 浏览

c# - 非托管导出 System.MissingMethodException

我使用 UnmanagedExports 公开了两个函数 getStatus() 和 checkStatus()。我可以成功地将它们与 C++ 代码分开调用。但是当我从第二个函数 checkStatus() 内部调用第一个函数 getStatus() 时,我得到了 MissingMethodException。以下独立函数的代码工作正常:

以下抛出 MissingMethodException:

如何从 c# 中的另一个公开函数中调用一个函数(使用 UnmanagedExports 公开)?

0 投票
1 回答
63 浏览

c# - 将值分配给从非托管 cpp 调用的 c# 中的地址用户定义结构

考虑以下结构

在我 unmagaed DLL(cpp) 中,我通过传递结构的地址来调用函数,如下所示:

在我的托管 DLL 中,定义就像

在 c# 代码中,我分配了以下成员

但是当我在执行语句后看到 result_recognize 的内容时,值 200 被分配给 usNumPhrases 变量而不是 ulSizeBytes

0 投票
1 回答
54 浏览

c# - 使用 UnmanagedExports 显示和关闭 c# form c++

我需要显示带有消息“请稍候”的 C# 表单,然后在后台执行其他任务。当这些附加任务完成后,我必须隐藏/关闭该表单。我在 C++ 控制台应用程序中执行此操作。我正在调用函数来显示和关闭表单,这些函数在 C# 中定义并使用 UnmanagedExports 公开。问题是表单没有正确显示(所有控件都没有加载),当光标出现在表单上时,它会显示加载状态。如何正确显示表单、执行任务然后关闭表单?

C++ 代码:

C#代码:

0 投票
0 回答
442 浏览

c# - 非托管导出未创建 .lib 文件

我正在尝试创建一个从托管 C# 类库中导出简单函数并在非托管 C++ 控制台应用程序中使用它的示例。

为此,我正在使用 Robert Giesecke 的 Unmanaged Exports。(IDE 是 Visual Studio 2017)

我在托管方面的代码是:

构建平台目标设置为 x86。

但是在构建项目时没有创建 .lib 文件。只有dll本身。

据我了解,我需要非托管端的链接器设置的 lib 文件。

我究竟做错了什么?有人能帮我吗?

0 投票
1 回答
284 浏览

c# - 使用 unmamagedexports 从 Access VBA 调用 C# DLL 时出现 VBA 错误 49 和错误 424

在我们的环境中,我们的主应用程序使用 MS Access 作为前端。后端是 Access、MySQL 和 MariaDB。我们需要的一些例程仅在 C# 中可用,因此我们必须能够从 VBA 调用 .NET dll 例程。我对注册的 dll 进行了一些测试(使用 RegASM),它运行良好。但是,对于客户端计算机上的安装,我们确实需要能够在不注册共享 dll 的情况下访问它们。

我一直在尝试让 MS Access VBA 中的动态加载库能够工作很长时间。当我找到这个例子时,我以为我已经很接近了:Canonical: How to call .NET methods from Excel VBA

我逐字输入示例并使用 Visual Studio 2017 Community 构建它。然后我尝试在两个不同的测试环境中运行它。第一个是带有 MS Office Pro 2010(32 位)的 Windows 7 Pro(64 位)盒子。第二个测试盒有Windows 10 Pro(64位)和MS Office 2016 Pro(64位)。两者的结果是相同的,除了错误号/消息。

这是来自上述链接的示例代码(我希望重新发布该片段不会违反礼节。我想让这篇文章更容易理解):

这是VBA代码。唯一的区别是我在 Access 2010 32 位测试中没有使用“PtrSafe”限定符,但我在 Access 2016 64 位 Access 测试中使用了它。我将 Visual Studio Platform Target 设置为 x86 以进行 32 位访问的测试,将 64 位访问设置为 x64。除此之外,一切都一样。

运行代码时,错误总是出现在“Set mObj”行。

在Access 2010 32位测试中,错误为:

运行时错误“49”:错误的 DLL 调用约定

在Access 2016 64位测试中,错误为:

运行时错误“424”:需要对象

在这两个测试中,我都运行了 DumpBin,结果看起来还不错:

根据 stackoverflow 上的其他一些帖子,我还尝试了 DllExport 上的 CallingConvention 参数,但结果始终相同。我很惊讶我无法让这个例子工作,因为我是直接从另一个帖子输入的,我仔细检查以确保它被正确复制。任何帮助将不胜感激。

0 投票
1 回答
93 浏览

c# - 非托管导出未显示在 DLL 中

我有一个新项目和一个测试类,方法如下:

我在 DotNet 4.6 中使用最新的非托管导出(RGiesecke.DllExport)...运行 Nirsofts 查看器时,我在 dll http://www.nirsoft.net/utils/dll_export_viewer.html中看不到我的方法)

我也有 x86 的平台目标......我做错了什么?我计划在使用 Win32API 的 ruby​​ 1.8.1 程序中使用它