问题标签 [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.
c# - C# DllImport 返回类型是 TCHAR?
我有一个带有以下签名的 c++ 函数
我有
如何将字符串编组为 TCHAR*?谢谢
c++ - 如何在 .NET 中使用托管 DLL 中的非托管类?
我有一个非托管类,我试图从托管DLL 文件中进行 dllexport。我正在尝试在另一个托管DLL 文件中使用非托管类。但是,当我尝试这样做时,会出现链接错误。
我已经用非托管 DLL 文件做了很多次,所以我知道它是如何工作的。我知道如何在托管类中使用“公共参考”等。
我需要在某个地方设置一些标志吗?还是我必须做一些 DllImport 魔术?
这是在 .NET 2.0 和Visual Studio 2005上。
c# - 从 C# 调用 C++ dll 函数:结构、字符串和 wchar_t 数组
这是我需要解决的一个简单问题,但它让我觉得我的头发变白了,因为我所有的尝试都返回了同样的错误:
“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”
我有一个用 C++ 编写的示例应用程序,它调用 dll。以下是相关代码:
现在,当我调试 C++ 代码时,它会做正确的事情——将一些 Unicode 数据写入数据结构。
这是我尝试在 C# 中做同样的事情
我的猜测是我没有正确编组 RECO_DATA 结构,因为 convertHKID_Name 函数写入的正是这个结构。但是我应该如何解决它?
.net - DllImport 和 ASP.NET
我在使用 DllImport 和 ASP.NET 时遇到了一些问题,因为当我使用导入的方法时,ASP.NET 会加载 Dll 并锁定文件,即使它完成使用后也是如此。有没有办法强制 ASP.NET 释放文件上的锁定?
c# - C#格式化外部Dll函数参数
我还没有找到关于这个主题的好参考。对于这个例子,我们将使用一些我试图移植到 C# 的 C++ 代码。
在 C++ 领域,我们有以下外部库函数原型:
并在其中使用如下:
现在我正在尝试将第一行移植到 C# 中,但这里没有明确的路径。
这是我到目前为止所得到的:
现在的问题是:有没有好的指南告诉我“PSTR pPathFile”应该是“[MarshalAs(UnmanagedType.LPStr)] string pPathFile”......假设这是正确的?
或者,指向“PMAPPING”结构的指针变成“out IntPtr pMapping”......假设这是正确的?
对这个人有什么帮助吗?
silverlight - 如何确定是否在 Silverlight 应用程序中切换了 Caps Lock?
在 Silverlight 应用程序的登录屏幕中,我需要确定是否切换了 Caps Lock。这很容易通过处理 KeyUp 或 KeyDown 事件,但是即使没有按下某个键,如何确定它是打开还是关闭?
我想这样做的原因是,如果用户在 Silverlight 应用程序运行时没有按 Caps Lock,而是在进入登录屏幕之前切换了它,该怎么办?我仍然需要警告他们大写锁定已打开。
显然,在 Silverlight 中无法处理非托管代码,因此以下内容不起作用。
[DllImport("user32.dll")] internal static extern short GetKeyState(int keyCode);
.net - 如何获取异常堆栈
我有一个 Winform 应用程序 (C#),它从 dll 导入一些函数。
有时在运行应用程序时,我会遇到以下异常:
System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。
我在 AppDomain.CurrentDomain.UnhandledException 中捕获它。
但我看不到堆栈。我如何获得堆栈?
谢谢。
interop - DllImport - PreserverSig 和 SetLastError 属性
在 MSDN 上,我找到了两个属性的以下描述:
PreserveSig将 PreserveSig 字段设置为 true 以直接转换具有 HRESULT 或 retval 值的非托管签名;将其设置为 false 以自动将 HRESULT 或 retval 值转换为异常。默认情况下,PreserveSig 字段为 true。
SetLastError使调用者能够使用 Marshal.GetLastWin32Error API 函数来确定执行方法时是否发生错误。在 Visual Basic 中,默认值为 true(这会增加一些开销);在 C# 和 C++ 中,默认值为 false。
我的问题是:这两者如何相互关联?假设我将 PreserveSig 设置为“false”——这意味着我应该将 HRESULT 转换为异常——如果非托管函数返回表示错误或未发生错误的整数,如何将其转换为异常?
另外,如果我设法使用 PreserveSig 提取异常,为什么还需要调用 GetLastWin32Error 方法?
亲切的问候PK
vb6 - 从 VB6 调用一个简单的 VC DLL
我有一个用 VC6 编写的简单 DLL,具有一个功能:
我使用以下命令从 vb6 调用它:
我收到“错误的 dll 调用约定”错误,但我不知道为什么。有任何想法吗?
.net - DLLImport'ed / P/Invoke'd win32 dll 中/带有自定义类型?
下午好,
我目前正在与一个旧的 .dll 搏斗,我必须在 .Net 应用程序中重新使用该功能,到目前为止,我导入了返回 bool 等的基本/简单函数/方法,但实际上有些人确实也期望(或return) 在 .dll 中声明的类型。
我将如何处理?我将如何在我的 .net 环境中映射/创建该类型?这有可能吗?
干杯和感谢,-Jörg