Questions tagged «pinvoke»

P / Invoke是由Microsoft创建的公共语言基础结构(CLI)的实现规范,用于从托管代码中调用本机代码库。

19
即使平台相同,也“尝试加载格式错误的程序”
我从64位系统上的32位非托管DLL调用函数。我得到的是: BadImageFormatException:试图加载格式错误的程序。(来自HRESULT的异常:0x8007000B) 最初,我将项目设置为Any CPU平台,因此将它们都更改为x86,但是此错误仍在发生。这确实是我所知道的唯一解决方法。 DLL没有损坏或任何东西,因为我可以将它们与其他程序一起使用(我没有源程序)。我以为也许没有找到依赖性,但是我检查了一下,发现它们都在那里。另外,DllNotFoundException在这种情况下,它不会抛出吗? 我还可以做些什么?在您说“改用64位非托管DLL”之前,让我指出,没有一个。;)

18
在WPF中将窗口移到最前面
如何将WPF应用程序带到桌面前端?到目前为止,我已经尝试过: SwitchToThisWindow(new WindowInteropHelper(Application.Current.MainWindow).Handle, true); SetWindowPos(new WindowInteropHelper(Application.Current.MainWindow).Handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); SetForegroundWindow(new WindowInteropHelper(Application.Current.MainWindow).Handle); 没有一个人在做这项工作(Marshal.GetLastWin32Error()就是说这些操作已成功完成,并且每个定义的P / Invoke属性都具有SetLastError=true)。 如果我创建一个新的空白WPF应用程序,并SwitchToThisWindow使用一个计时器调用,它将完全按预期工作,因此我不确定为什么在我的原始情况下它不起作用。 编辑:我正在与全局热键一起执行此操作。
214 c#  .net  wpf  winapi  pinvoke 

2
UI Automation的Google Chrome浏览器可访问树缓存问题
当用户在浏览器中向下滚动时,Google Chrome不会刷新可访问性元素(AutomationElement)。 要重现它: 使用"chrome --force-render-accessibility"或通过在上设置全局可访问性启用渲染器可访问 性"chrome://accessibility"。 前往http://en.wikipedia.org/wiki/Google 在UI自动化模式下(从Windows Kits中)打开inspect.exe,查找“到相关文章的链接”元素。 返回Chrome,向下滚动直到底部的“相关文章链接”可见 屏幕上标记了“到相关文章的链接”元素 我找到了一些手动的解决方案,它们可能会迫使Chrome刷新它: 将“缩放”设置为90%,然后将其设置回100%(非常难看) 关闭辅助功能,然后再打开 chrome://accessibility/ 我要寻找的是能够以编程方式执行这些操作之一的功能,或者能够使Chrome刷新其缓存树的任何操作。 我试过的 调整窗口大小 PInvoke/MoveWindow 重绘窗口 PInvoke/Redrawwindow 构建chrome扩展程序,并根据需要强制缩放到100%:(可以chrome.tabs.setZoom(null, 0);工作,但要眨眼并放慢窗口速度) 这些都不正常。 编辑:在Windows 7下使用Google Chrome 40.XX,41.XX,42.XX,43.XX,44.XX,45.XX,46.XX,47.XX.Dev,48.XX.Dev进行了测试。

17
无法加载DLL(找不到模块HRESULT:0x8007007E)
我有一个包含非托管C ++ API代码的dll库,需要在.NET 4.0应用程序中使用。但是我尝试加载dll的每种方法都会出现错误: 无法加载DLL“ MyOwn.dll”:找不到指定的模块。(来自HRESULT的异常:0x8007007E) 我已阅读并尝试了在互联网上找到的许多解决方案。什么都没有 我尝试使用以下方法: [DllImport("MyOwn.dll", CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs((UnmanagedType.I4))] public static extern Int32 MyProIni(string DBname, string DBuser_pass, string WorkDirectory, ref StringBuilder ErrorMessage); 当我尝试阅读本文并运行本示例(从下载的代码中)时,它可以正常运行(所用的dll在bin / debug文件夹中) 我已经复制了我的dll(以及它依赖的所有文件到我的bin文件夹中)。 我也尝试了这种方法,但是遇到了同样的错误: [DllImportAttribute(MyOwnLibDllPath, EntryPoint="TMproIni")] [return: MarshalAs(UnmanagedType.I4)] public static extern int MyproIni(string DBname, string DBuser_pass, string WorkDirectory, ref StringBuilder ErrorMessage); 有什么建议?
113 c#  c++  dll  pinvoke 


9
如何处理名称长度超过259个字符的文件?
我正在开发一个应用程序,该应用程序遍历某些目录中的每个文件,并对这些文件执行一些操作。除其他外,我必须检索文件大小和修改此文件的日期。 某些文件全名(目录+文件名)太长,我无法使用.NET Framework FileInfo,它被限制为MAX_PATH(260个字符)。许多Web来源建议通过P / Invoke使用本机Win32函数来访问名称过长的文件。 当前,Win32函数似乎会出现完全相同的问题。例如对于GetFileAttributesEx(270字节)的路径(kernel32.dll)失败,并出现Win32错误3 ERROR_PATH_NOT_FOUND。 可以从Notepad2中成功打开相同的文件,并使用Windows资源管理器成功显示该文件(但由于259个字符的限制¹,例如Visual Studio 2010无法打开它)。 文件路径为270个字符长时,我该怎么办才能访问文件? 笔记: 删除或忽略文件路径长度超过259个字符的文件不是解决方案。 我仅在寻找与Unicode兼容的解决方案。 该应用程序将在安装了.NET Framework 4的Windows 2008 / Vista或更高版本下运行。 ¹令人惊讶的是,Microsoft Word 2007失败,抱怨没有软盘驱动器的计算机上的“软盘太小”,或者当剩余4 GB RAM时抱怨“ RAM内存不足”,或者最后是“需要更新防病毒软件”。他们是否会停止一天至少在诸如Microsoft Office之类的关键产品中显示如此愚蠢的毫无意义的错误?

7
如何从WPF中可调整大小的窗口中删除最小化和最大化?
WPF不提供具有允许调整大小但没有最大化或最小化按钮的窗口的功能。我希望能够制作一个这样的窗口,以便可以调整对话框的大小。 我知道该解决方案将意味着使用pinvoke,但我不确定该如何呼叫。搜索pinvoke.net并没有发现我需要的任何东西,主要是我确定,因为Windows窗体确实在其窗口中提供CanMinimize和CanMaximize属性。 有人可以指向我或提供有关如何执行此操作的代码(首选C#)吗?

1
什么会导致P / Invoke参数传递时混乱?
这是专门在ARM而不是x86或x64上发生的问题。我有一个用户报告此问题,并能够通过Windows IoT在Raspberry Pi 2上使用UWP再现它。我以前用不匹配的调用约定已经看到过这种问题,但是我在P / Invoke声明中指定了Cdecl,我尝试在本机端显式添加__cdecl并获得相同的结果。这里是一些信息: P /调用声明(参考): [DllImport(Constants.DllName, CallingConvention = CallingConvention.Cdecl)] public static extern FLSliceResult FLEncoder_Finish(FLEncoder* encoder, FLError* outError); C#结构(参考): internal unsafe partial struct FLSliceResult { public void* buf; private UIntPtr _size; public ulong size { get { return _size.ToUInt64(); } set { _size = (UIntPtr)value; } } } …
79 c#  windows  uwp  arm  pinvoke 

5
pinvokestackimbalance —如何解决此问题或将其关闭?
我刚从vs2008切换到vs2010。完全相同的解决方案,除了现在每次对C ++ dll的每次调用都会产生“ pinvokestackimbalance”异常。 在2008年不会触发此异常。我具有对C ++ dll和调用应用程序的完全访问权限。pinvoke似乎没有任何问题,但是这个问题使调试其他问题变得不可能。IDE经常停止向我介绍这些事情。 例如,这是C#签名: [DllImport("ImageOperations.dll")] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage, int inTotalSize, int inWindow, int inLevel); 这是C ++方面的样子: #ifdef OPERATIONS_EXPORTS #define OPERATIONS_API __declspec(dllexport) #else #define OPERATIONS_API __declspec(dllimport) #endif extern "C" { OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, unsigned char* …

6
使用C#代码中的C ++ dll中定义的类
我有一个用C ++编写的dll,我需要在我的C#代码中使用此dll。搜索之后,我发现使用P / Invoke可以访问所需的函数,但是这些函数是在类中定义的,并且使用非静态私有成员变量。因此,我需要能够创建此类的实例以正确使用这些功能。如何获得对此类的访问权限,以便可以创建实例?我一直无法找到一种方法来做到这一点。 我想我应该注意,C ++ dll不是我的代码。
73 c#  c++  dll  pinvoke 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.