问题标签 [dllimport]

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 回答
4626 浏览

c++ - 安装 msvcr90.dll 的简单方法!(没有 C++ 可再发行包)

我的程序是将 python 文件转换为 exe 文件。这个exe文件的问题是它没有安装python就无法运行,它只需要mscvr90.dll!我不想只为这个 dll 文件安装 C++ Redistributable Package!那个大胖包!如果我将此 msvcr90.dll 复制到我的应用程序文件夹中,它将无法正常工作!

我安装python时msvcr90.dll的文件路径是:

C:\windows\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375

我真的不知道python是如何安装这个文件的,但必须有一种简单的方法来做到这一点。

有任何想法吗?

0 投票
3 回答
1753 浏览

c# - 尝试从 kernel32 导入 DllImport 时出现奇怪的异常

我已经使用这个特殊功能几个月了,但是今天它停止工作了。我无法想象为什么,我不排除任何可能性,所以如果你有任何想法,请告诉!

我正在以这种方式加载函数:

然后我尝试以这种方式使用它:

正如所说,这已经工作了很长时间,但是从现在开始它会抛出这个异常:

System.EntryPointNotFoundException:无法在 DLL“kernel32”中找到名为“GetPrivateProfilestring”的入口点

为什么会发生这种情况?dll是否可能已更改(通过Windows更新或其他方式)?也许只是再也找不到了,那么例外会有所不同吗?我知道这不太可能,但是因为我说过我没有排除任何可能性,因为这一直有效并且源代码没有改变......

更新:奇怪的是,大写有所帮助,它现在似乎可以工作了。但是我仍然很好奇为什么会发生这种情况,为什么现在会发生?我可以向你保证,它已经工作了几个月。

我有点害怕只是更改它并在所有地方更新我们的软件,因为错误只发生在我的机器上(据我所知),但是旧方法已经在各种 PC 和配置上运行了 6 个多月.

0 投票
4 回答
8329 浏览

c# - 创建 C++ Dll,并从 C# 调用它

在我的项目中,我得到了一个带有 C++ 示例代码的设备。代码没问题,设备按预期工作。

但我需要它来与我的 C# 接口对话,因为所有其他设备当前都在使用 C# 接口。

所以我打算为驱动程序创建一个 DLL Wrapper。我将创建一个我自己的 C++ 库(从具有适当接口的源代码)并使用 DLLImport 从 C# 调用这个 C++ 库(只需在那里调用我的接口。)。

我很确定可以通过这种方式完成,但我从未创建过 C++ 库并从 C# 中使用过它。那么,任何人都可以向我推荐一些与我的问题相关的教程吗?

我正在使用 C++/C# int VS.NET 2008。

问候, 马克苏德

0 投票
1 回答
1964 浏览

c# - 使用 C# 为 PInvoke 字符串编组指定代码页

我正在使用 PInvoke 调用 DLL。DLL 的函数在代码页 437 中返回一个 C 字符串。

有没有办法让 .Net 编组将字符串转换为 unicode,或者有人可以建议我应该给 DllImport() 和 MarshalAs() 提供哪些参数以及使用转换函数来获得 unicode 输出?

作为参考,这是我目前使用的 DllImport:

0 投票
3 回答
4372 浏览

c# - 将 dllimport 从 vb6 转换为 c# 3.5

我在 VB6 中有一些从 dll 导入函数的代码,它使用 byVal 和 byRef 关键字,我想将该代码转换为 C# 3.5。

  1. 字符串的unicode编码会有问题吗?

  2. 我是否将 vb6 中的“byRef”变量声明为 C# 代码中的“ref”变量?

  3. 它将返回值输入到由 VB6 代码作为“byVal”参数发送的字符串中,这是如何工作的,如果你想允许函数编辑字符串,你不应该发送东西“byRef”吗? 这个概念仍然适用于我的 C# 代码吗?

我尝试从 VB6 处理函数声明,参数类型只是 int、long 和 string。在有“byVal”关键字的地方,我只是将其留空,并用 C# 中的“ref”关键字替换了“byRef”关键字,代码不起作用。

VB6 代码:

我的 C# 3.5 翻译:

请帮忙,我已经花了一整天的时间:p....

最后,我使用自动项目转换器(从 VB6 到 VB.NET 2008)将函数调用转换为 VB.NET 库,并使用 C# 引用调用它。

谢谢。

0 投票
1 回答
623 浏览

c++ - 在 C++ 中使用 VB.NET DLL 文件 - 类是抽象的

我创建了一个在非托管C++项目中使用的 VB.NET DLL 文件。

当我尝试创建该类的对象时,出现错误:

无法实例化抽象类

为什么我的课程是抽象的?我怎样才能修改它,使它不会是抽象的?

0 投票
3 回答
1877 浏览

mono - Mono (linux) 中的 DLLImport 崩溃:ical_wrapper_mono_marshal_free

我在 Linux 中遇到了 Mono Interop 的问题。我有一个需要在 C# 程序集中使用的本机共享库(用 Lazarus 制作)。Windows 和 Linux 上的 Mono C# 程序集使用共享库。

程序集在运行时通过 DllImport 加载共享库,并调用生成文件并返回带有新文件名的字符串的导出函数。共享库中的函数工作正常,但在 Linux 中,当函数返回时,Mono 运行时在 Object.__icall_wrapper_mono_marshal_free 处崩溃。在 Windows 上使用 Mono 可以正常工作。

我进行了几次测试,可以看出共享库确实有效(新文件在指定路径生成),但最终运行时崩溃。运行时似乎在将结果字符串封送回程序集方面存在问题,因为如果我使用返回 int 的导出函数,它就可以工作。

我的共享库是这样的:

调用 C# 程序集如下所示:

我尝试了几种替代方法(从导出的函数返回本机字符串,将调用约定更改为程序集和共享库上的 stdcall,更改 DllImport 中的字符集)。

我确定我遗漏了一些东西,但我在谷歌上没有找到任何关于这个问题的信息。

我的崩溃显示:

有任何想法吗?

0 投票
2 回答
3174 浏览

c# - 使用 DLLImport 导入对象

我有一个用于 c++ 类的 dll (SLABHIDDevice.dll)。我正在尝试在 C#.net 应用程序中使用此 dll 的功能。dll 包含几种方法,我可以很容易地使用这些方法,例如这样的语句......

(如果我在这里弄错了一些术语,我很抱歉,我是使用 dll 的新手)

SLABHIDDevice.dll 的文档说它还包含一个类对象 CHIDDevice。并且该对象具有完整的成员函数列表,例如 Open();

如果我尝试使用与上述相同的语法导入 Open(),则会收到一条错误消息,指出它找不到 Open() 函数的入口点。这是因为 Open() 是 CHIDDevice 的成员吗?

这是来自 DUMPBIN 的 dll 的组成......下面三个函数是我唯一能够开始工作的函数吗?有谁知道我需要使用什么语法来获取其他语法?函数名前面的问号是什么意思?

0 投票
1 回答
472 浏览

python - 在 Python 中加载 dll 时,dir 函数是否显示其方法?

此代码是否显示来自 dll 的方法?

如果没有,我们如何才能看到 python 中的 .dll 方法?

0 投票
2 回答
1350 浏览

c# - 从客户端 PC 上无法浏览的网络共享动态加载 .dll - WCF?

我正在使用 PnP 复合应用程序指南构建 WPF 应用程序。该应用程序将在我们的 Intranet 中本地运行。

模块将根据用户角色动态加载。因此,应用程序必须可以通过网络共享访问这些模块,从而可以从客户端计算机访问这些模块。

我想做的是将所有模块 .dll 保存在工作人员无法访问的位置,但仍然能够在需要时以及当前用户经过身份验证以使用该模块时将它们提供给复合应用程序。

我的想法是通过从 WCF 服务流式传输 .dll 来加载它们,WCF 服务(在服务器上)可以访问 .dll 存储库,但没有任何客户端机器可以访问它。身份验证也将由服务处理。

我怀疑我可能以某种方式使事情过于复杂。

这是否可以通过简单的文件系统配置并在访问共享文件夹时以编程方式传递凭据来完成?如果我这样做,是否只会向调用应用程序授予访问权限,还是登录用户现在能够导航到共享文件夹?

无论如何,这是 MEF 或您知道的任何其他项目的已解决问题吗?(我希望这不值得 LMGTFY ——我无法想出任何东西。)