问题标签 [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 回答
3986 浏览

c# - 如何处理失败的 DllImport?

我正在尝试编写一个 C# 托管类来包装 SHGetKnownFolderPath,到目前为止它可以在 Vista 上运行,但由于在 shell32.dll 中找不到正确的函数,因此在 XP 上崩溃,正如预期的那样。

我想设置它,这样如果使用 XP,我可以使用 System.Environment.GetFolderPath 回退到一个(公认的 hacky)解决方案。(或者,如果它在 shell32 中找不到函数,那就更好了。)

除了条件编译之外,还有什么方法可以做到这一点?

我当前的代码如下所示:

0 投票
2 回答
545 浏览

c# - 复杂的 (?) pinvoke 情况 - 避免函数重载

概括:

我有一堆必须从 C# 调用的 C 函数。我目前的工作解决方案基于函数重载,我想知道是否有更优雅的解决方案。

C的东西:

头文件中的某处

函数示例

在 C 中,该函数的使用应与此类似:

C# 的东西:

现在我在 C# 中执行以下操作:

接着:

问题

由于我是 C# 菜鸟,我想知道这是否是最好的方法。特别是我想知道是否有办法重载函数。

0 投票
1 回答
3081 浏览

c# - 如何用浮点值“填充” IntPtr 参数?

我正在使用 dllImport 在 C# .NET 中使用 C 库。该库中的一种方法使用数据类型 void* 作为参数。我发现,我可以在 C# 中使用与 void* 匹配的数据类型 IntPtr。

现在我根本不知道如何设置这个 IntPtr 参数的值。事实上,我想在这个参数中放入一个浮点值。我该怎么做?

提前感谢您的任何想法。西蒙娜

0 投票
2 回答
201 浏览

windows - 在 Windows 中激活注入的 DLL

我目前正在使用 SetWindowsHookEx 将我的 DLL 注入另一个进程,但是它不会立即加载。我注意到,如果我手动单击窗口,它将被加载,所以我猜它正在等待某种类型的消息来获得激活滚动?我目前正在使用

但这似乎是一种 hack,并不总是有效(即 otherAppHwnd 被最小化到任务栏。

任何指针都会很棒!

编辑:这是一个 CBT 钩子

0 投票
2 回答
2767 浏览

add-in - C#:Excel 2007 插件,如何挂钩 Windows 激活和停用事件

我正在编写一个 Excel 2007 插件。使用 VS2008 和 .net 3.5,C#。

我发现了 Microsoft.Office.Interop.Excel.Application 的 WindowActivate 和 WindowDeActivate 事件。

令人惊讶的是,WindowActivate 和 Deactivate 仅在我在两个 Excel Windows 之间切换时触发。如果我切换到记事本,我希望 Deactivate 被触发,但它没有发生。如果我切换到 excel 窗口,从记事本以同样的方式,我希望激活被触发,但它没有发生。看起来该行为表明窗口是 MDI 子窗口。

现在我要做的是获取 Excel 主窗口的 HWnd 并使用 dllimport 功能挂钩窗口激活和停用。

任何人都可以在这方面指导我。

问候

0 投票
3 回答
2712 浏览

c# - 从包含指针的 C# 调用 Delphi DLL 不工作

我有一个这样定义的delphi dll

我像这样转换为C#:

电话是这样的:

它要求打开一个通道并将其写入 conn。它返回假。所以我过不去。conn 对象返回 null。我知道服务器正在接听我的电话。

我认为这与类型错误的 struct C# 有关。我对不受管理的东西很陌生,所以如果有人可以帮助通过。

我只有dll。谢谢

0 投票
1 回答
198 浏览

c# - 如何扫描目录中的程序集并加载它们?

我想扫描目录中尚未在项目中引用的任何程序集,然后加载实现 IMyInterface 的类的所有实例。

我知道Assembly.LoadFile方法可以帮助我,但我如何确定我正在加载的程序集是否已经被静态引用?我不想两次加载任何程序集。

0 投票
4 回答
4369 浏览

c# - C++ 如何导入用 C# 制作的 DLL?

我有一个用 C# 制作的 DLL,这个 DLL 包含一些类似 Creator 的类。

我需要加载这个 DLL 并在 C++ 非托管中使用 Creator 类,

那么有什么方法可以创建该实例,或者我必须只加载公开的函数吗?

我需要这样的东西:

p>

这可能吗?

0 投票
4 回答
3325 浏览

c# - C Dll 导入 C#

您如何将结构写入内存中的某个位置,该位置将能够通过 ref 调用被引用并且不会被更改。

我一直在传递 ref 因为我需要一个指针来与 dll 通信并且值正在发生变化。不通过 ref 会引发“尝试读取或写入受保护的内存”错误。

想法?

0 投票
1 回答
2012 浏览

c# - 附加依赖项/DLL/库

我正在研究 OpenCV 库,这个库是用 C++ 编写的,我编写了一个简单的 win32 应用程序。我在其中实现了一些简单的功能。这个功能需要额外的库,我正在使用项目->属性->配置属性->链接器->输入->附加依赖项来指定附加的库文件。

现在我想用 C# 编写一个使用上述项目的 DLL 的应用程序,我正在使用 [DllImport] 方法使用这个 DLL。当我在 Visual Studio 之外运行应用程序时,它会为我正在导入的 Dll 显示“DllNotFoundException”。我已将 dll 文件放在 build 和 code 文件夹中。

谁能建议我为什么会出现这个问题?是否存在依赖/附加库的问题?

请告诉我如何添加其他库。我也将这些额外的 DLL 放在构建文件夹中,但它仍然给我错误。

我尝试了另一个没有额外依赖的简单 dll,它没有给我任何错误,看起来有一些依赖库问题。请建议我如何解决问题