如何在.NET Compact Framework中使用加载和卸载本机DLL文件?

发布于 2024-11-29 22:09:02 字数 661 浏览 0 评论 0原文

我在 Windows CE 与本机某些 DLL 文件交互,并且应用程序存在一些未知的行为和问题。

目前,我使用 [DllImport] 属性直接调用并定义一个方法:

[DllImport("mynative.dll")]
private static extern void HelloWorld(byte[] arrName);

我想尝试释放加载的库,网络研究向我展示了 LoadLibraryFreeLibrary< /代码>。如何找到教程或示例代码?

堆栈溢出问题如何动态加载和卸载本机 DLL file? 是一个桌面示例,但是对于 Compact Framework 如何实现呢? 请注意,.NET Compact Framework 没有 Marshal.GetFunctionPointerForDelegate 方法。

I have a .NET Compact Framework (CF) application on Windows CE that interacts with native some DLL files, and the application has some unknown behaviors and problems.

For now, I'm using direct calls by using the [DllImport] attribute and define a method:

[DllImport("mynative.dll")]
private static extern void HelloWorld(byte[] arrName);

I want to try to release the loaded libraries, and web researches showed me LoadLibrary and FreeLibrary. How can I find a tutorial or sample code?

Stack Overflow question How to dynamically load and unload a native DLL file? is a desktop sample, but how can it done for Compact Framework?
Note that .NET Compact Framework does not have Marshal.GetFunctionPointerForDelegate method.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彼岸花ソ最美的依靠 2024-12-06 22:09:02

CF 运行时本身为 P/Invokes 调用 LoadLibrary - 它为您使用的 DLL 的每个不同“版本”调用它(因此,如果您在一个地方使用“mynative.dll”,而在另一个地方仅使用“mydll”,它将被调用两次)。

从该调用返回的句柄不会也不应该暴露给应用程序。除了关闭应用程序之外,无法让运行时调用该 DLL 上的 FreeLibrary,因此无法释放它。

不过,我必须同意@Cody Gray 对这个问题的评论,因为即使它确实有效,也无法解决问题。您需要实际找到并修复导致您所看到的不良行为的错误。

The CF runtime itself calls LoadLibrary for P/Invokes - it calls it for every different "version" of the DLL you use (so if you used "mynative.dll" in one place and just "mydll" in another, it would get called twice).

The handle returned from that call is not exposed to applications, nor should it be. There is no way, short of closing the app, to get the runtime to call FreeLibrary on that DLL, so there is no way to release it.

I'm going to have to agree with @Cody Gray's comment on the question, though, in that even if it did work, it wouldn't fix the problem. You need to actually find and fix the bug causing the bad behavior you're seeing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文