Tag: pinvoke

无法加载DLL(无法find模块HRESULT:0x8007007E)

我有我需要在.NET 4.0应用程序中使用的非托pipeC ++ API代码的DLL库。 但是,我尝试加载我的DLL的每一个方法我得到一个错误: 无法加载DLL'MyOwn.dll':无法find指定的模块。 (从HRESULTexception:0x8007007E) 我已阅读并尝试在互联网上find的severa解决scheme。 什么都没有 我曾尝试使用以下方法: [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); 有什么build议么?

谷歌浏览器与UI自动化访问树caching问题

当用户在浏览器中向下滚动时,Google Chrome不刷新辅助function元素( AutomationElement )。 重现它: 使用"chrome –force-render-accessibility"启用渲染器可访问性,或在"chrome://accessibility"上设置全局可"chrome://accessibility" 。 转到http://en.wikipedia.org/wiki/Google 在UI自动化模式下(从Windows套件)打开inspect.exe ,查找“链接到相关文章”元素。 回到Chrome,向下滚动,直到看到底部的“链接到相关文章” “相关文章的链接”元素被标记为屏幕 我发现了一些手动解决scheme,可以强制Chrome刷新它: 设置缩放到90%,然后将其设置回100%(非常非常丑陋的方式) closures辅助function,然后打开chrome://accessibility/ 我正在寻找的是能够以编程方式执行这些操作之一,或任何可以使Chrome刷新其caching树的操作。 我试过了: 使用PInvoke/MoveWindow调整窗口大小 用PInvoke/Redrawwindow重PInvoke/Redrawwindow窗口 构build一个chrome扩展,并根据需要强制缩放为100%: chrome.tabs.setZoom(null, 0); (工作,但眨眼,放慢窗口) 这些都没有正常工作。 编辑 :testing与谷歌Chrome 40.XX,41.XX,42.XX,43.XX,44.XX,45.XX,46.XX,47.XX.Dev,48.XX.Dev在Windows 7下。

在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 )。 如果我创build一个新的空白WPF应用程序,并用计时器调用SwitchToThisWindow ,它完全按预期工作,所以我不知道为什么它不工作在我的原始情况。 编辑 :我正在与全球热键一起做这个。

SendInput和64位

下面是我用来模拟通过SendInput API按键的一些代码的摘录。 如果我将我的应用程序设置为x86 CPU编译,但不能用于x64 CPU编译,此工作正常。 我猜测它有一些事实,即x64使用双倍大小的指针,但我试图改变这个[FieldOffset(4)]到这个[FieldOffset(8)]但它没有工作。 它可能是一个事实,它是导入的32位版本的user32.dll? #region SendInput API [DllImport("user32.dll", EntryPoint = "SendInput", SetLastError = true)] static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize); [DllImport("user32.dll", EntryPoint = "GetMessageExtraInfo", SetLastError = true)] static extern IntPtr GetMessageExtraInfo(); private enum KeyEvent { KeyUp = 0x0002, KeyDown = 0x0000, ExtendedKey = 0x0001 } private struct KEYBDINPUT { […]

在C#中元帅“char *”

给定DLL中的以下C函数: char * GetDir(char* path ); 你将如何P /调用这个函数到C#中,并正确编组char *。 .NET似乎知道如何做LPCTSTR,但是当我不能找出任何调用此函数时不会导致NotSupportedExceptionexception的封送处理。

正确的方式(在.NET中)将焦点切换到另一个应用程序

这是我迄今为止: Dim bProcess = Process.GetProcessesByName("By").FirstOrDefault If bProcess IsNot Nothing Then SwitchToThisWindow(bProcess.MainWindowHandle, True) Else Process.Start("C:\Program Files\B\B.exe") End If 它有两个问题。 有人告诉我,SwitchToThisWindow是depricated。 如果应用程序B被最小化,则从用户的angular度来看,该function静静地失败。 那么做正确的方法是什么?

如何从Native(C ++)代码返回文本

我正在使用Pinvoke在本机(C ++)代码和托pipe(C#)代码之间进行互操作。 我想实现的是从本地代码中获取一些文本到托pipe代码中。 为此,我尝试了很多东西,例如,使用[IN]和[OUT]传递string / stringbuilder,使用LPSTR封装,从函数等返回string,但在我的情况下没有任何作用。 任何帮助一些小代码将不胜感激。

将C#中的string传递给C ++ DLL并返回最简单的例子

我正在尝试使用C#中的C ++ DLL传递string的绝对最简单的例子。 我的C ++看起来像这样: using std::string; extern "C" { string concat(string a, string b){ return a + b; } } 像一个头像 using std::string; extern "C" { // Returns a + b __declspec(dllexport) string concat(string a, string b); } 我的C#是 [DllImport("*****.dll", CallingConvention = CallingConvention.Cdecl)] static extern string concat(string a, string b); } 我打电话给:Console.WriteLine(concat(“a”,“b”)); 但是这给了一个System.AccessViolationException。 这看起来似乎是最微不足道的事情,但是我完全停留在这个问题上。 […]

在c#代码中使用c ++ dll中定义的类

我有一个用c ++编写的dll,我需要在我的c#代码中使用这个dll。 search后,我发现使用P / Invoke会给我访问我需要的函数,但是这些函数是在类中定义的,并使用非静态的私有成员variables。 所以我需要能够创build这个类的一个实例来正确使用这个函数。 我怎样才能访问这个类,以便我可以创build一个实例? 我一直无法find办法做到这一点。 我想我应该注意到,C + + DLL不是我的代码。

我如何从C#调用C ++ / CLI?

我有一个用C ++实现的类,负责程序的算术计算,以及使用WPF的接口。 我用C#处理input,但是如何使用我的C ++类? 我已经看到了一些关于使一个托pipe的C ++包装类与它交互的意见,但我不知道从哪里开始。 我也不知道如何将其与所有其他代码一起编译。 我无法真正find关于这个的教程,并且在托pipeC ++上显示的东西并不是真的有帮助。 有什么可以帮助我的吗? 这对我来说似乎不合理。 编辑尝试m3rLinEz解决scheme,但它给我一个BadImageFormatException,我想这是因为该DLL不会生成。 我做了所有的事情,不知道发生了什么事。 有任何想法吗?