无法调用 DLL 导入条目、C# -> C++、EntryPointNotFoundException

2024-03-25

我正在尝试从 C# 调用用 C++ 编写的自定义 DLL 中的函数。但是,我在代码分析期间收到警告,并在运行时收到错误:

警告:CA1400: Microsoft.互操作性:正确 的声明 'SafeNativeMethods.SetHook()' 这样 它正确地指向现有的 “wi.dll”中的入口点。无人管理的 当前链接到的入口点名称 是SetHook。

错误: System.EntryPointNotFoundException 是 未处理的。找不到条目 DLL“wi.dll”中名为“SetHook”的点。

wi.dll 和 C# exe 两个项目都已编译到同一个 DEBUG 文件夹中,两个文件都驻留在此处。整个文件系统中只有一个名为wi.dll的文件。

C++ 函数定义如下:

#define WI_API __declspec(dllexport)
bool WI_API SetHook();

我可以使用 Dependency Walker 查看导出的函数:

as decorated: bool SetHook(void)
as undecorated: ?SetHook@@YA_NXZ

C# DLL 导入看起来像(我使用 MSDN 杂志中的 CLRInsideOut 定义了这些行):

[DllImport("wi.dll", EntryPoint = "SetHook", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAsAttribute(UnmanagedType.I1)]
internal static extern bool SetHook();

我也尝试过不使用 EntryPoint 和 CallingConvention 定义。

两个项目都是32位的,我使用的是W7 64位,VS 2010 RC。

我相信我只是忽略了一些事情......

提前致谢。


好吧,您知道入口点名称,请使用 [DllImport] 属性中的 EntryPoint = "?SetHook@@YA_NXZ" 属性。或者将 extern "C" 放在 C++ 代码中的声明之前,这样名称就不会被破坏。

[DllImport("wi.dll", EntryPoint = "?SetHook@@YA_NXZ", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAsAttribute(UnmanagedType.I1)]
internal static extern bool SetHook();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法调用 DLL 导入条目、C# -> C++、EntryPointNotFoundException 的相关文章

  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 如何正确使用和实例化现有预览处理程序

    我正在尝试使用现有的预览处理程序来显示文件的预览 我编写了一个简单的测试程序 以 1 查找给定文件的预览处理程序的 CLSID 2 实例化预览处理程序 3 通过流或文件初始化它 4 在基本窗口上渲染预览 这有效 或多或少 It works
  • Win32 自定义绘制树视图控件

    我正在尝试使用 NM CUSTOMDRAW 消息自定义树视图控件 我只是想用灰色绘制所有其他可见的项目 这是绘制的代码 INT CResourceOutliner On WM NOTIFY HWND hDlg WPARAM wParam L
  • 使用 BitBlt 捕获程序窗口始终返回相同的图像

    我编写了以下代码 C Win32 来捕获游戏窗口屏幕并从图像中获取像素颜色数组 函数 autoB 完成这项工作 然后我将结果数组绘制到窗口中以直观地检查我得到的结果 问题是 这个程序在我启动计算机后只工作一次 在第一次 缓存 从游戏中获取的
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 资源文件是否编译为 UNICODE 或 ANSI 代码页?

    首先 如果这个问题已经被回答了一百次了 我深表歉意 噢 但我的搜索显然很糟糕 因为我没有运气回答这个基本问题 EXE DLL中的资源是如何存储的 作为 UNICODE UCS 2 Windows 本机内部字符格式 还是使用资源块的代码页作为
  • 调整大小时在窗口中绘图留下未绘制的边框

    我遇到的问题看似微不足道 但我找不到解决的方法 这里是 我有一个窗口 里面有一些图形 为了简单起见 我们假设它是一个实心绿色矩形 填充了窗口的整个客户区域 我希望每次窗口改变大小时都重新绘制这个矩形并填充整个窗口 我最初做的就是这样的 我已
  • 以编程方式更改任务栏图标(Win32,C++)[重复]

    这个问题在这里已经有答案了 我有一个 C win32 程序 我想在运行时编辑任务栏图标以显示有关该程序的警报等 但是我对 win32 api 不太有经验 而且我找不到任何东西在线的 我发现的最接近的是http www windows tec
  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 全局拦截窗口移动

    我无法让全局系统挂钩正常工作 我希望在窗口移动时尽早收到通知 并更改窗口大小 这意味着 CBT 钩子HCBT MOVESIZE不会削减它 它只会在窗口移动后发生 我想挂钩窗口的实际移动 并能够在移动过程中更改窗口大小 挂钩是从 DLL 设置
  • C++/Win32 在虚拟内存中创建文件

    如何在虚拟内存中创建文件以及可以在其上使用普通文件函数 如 CreateFile WriteFile 等 吗 我正在尝试实现一个缓冲文件编写器类 但问题是管理需要动态常量重新分配的缓冲区 你可以使用管道 它们也被操作系统视为 文件 您可以将
  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 如果加载 dll 找不到依赖项,有什么方法可以捕获错误吗?

    我正在编写一个 Windows 32 位程序 可以使用多个可能的 dll 之一 所以它尝试依次加载每个 dll 使用SysUtils SafeLoadLibrary如果加载成功 它就会使用该 dll 不幸的是 其中一些 dll 静态链接到其
  • 如何以“正确”的方式处理带有空字节的 Python unicode 字符串?

    Question PyWin32 似乎很乐意将 null 终止的 unicode 字符串作为返回值 我想以 正确 的方式处理这些字符串 假设我得到一个像这样的字符串 u C Users Guest MyFile asy x00 x00sy
  • GetKeyState 函数?

    为什么我按下方向箭头ON后 函数GetKeyState仍然给我一个大于0的值 include
  • InvalidateRect 和 RedrawWindow 的区别

    当我想重绘窗口时 InvalidateRect 和 RedrawWindow 之间是否有首选函数可以调用 例如 这两个调用是否相等 win 将是 HWND RedrawWindow win NULL NULL RDW INVALIDATE
  • 如何在 Perl 中修改 Windows NTFS 权限?

    我在 Windows Server 2003 上使用 ActiveState Perl 我想在 Windows NTFS 分区上创建一个目录 然后授予 Windows NT 安全组对该文件夹的读取访问权限 这在 Perl 中可能吗 我必须使
  • 如何按名称杀死进程? (Win32 API)

    基本上 我有一个将启动多次的程序 因此 该程序将启动两个或多个进程 我想使用 Win32 API 并终止 终止具有特定名称的所有进程 我见过杀死一个进程的例子 但没有看到多个具有完全相同名称 但参数不同 的进程 尝试下面的代码 killPr

随机推荐

  • 为什么 return 不遵守finally 块中变量的值?

    finally总是最后执行 所以语句x 3应该最后执行 但是 运行此代码时 返回的值为 2 Why class Test public static void main String args System out println fina
  • 使用 AVPlayer 进行串流速度很慢

    我使用 AVPlayer 从互联网上传输 mp3 文件 但它的运行速度非常慢 使用探查器 我发现它首先下载整个文件 然后开始播放 有什么解决方法吗 现在 我正在使用这段代码 if let player player Notification
  • 使用预先签名的 URL 将文件放入 S3

    我整夜都在使用 Amazon S3 预签名 URL 来尝试 PUT 文件 我在 java 代码中生成预签名 URL AWSCredentials credentials new BasicAWSCredentials accessKey s
  • iPhone : 自定义标签栏,没有可怕的“更多”菜单

    所以我想构建一个具有超过 5 个项目并且可滚动的选项卡栏并找到本文 http www rumex it 2010 11 how to customise the tab bar uitabbar in an iphone applicati
  • “OpenCV”被视为未找到

    Linux 风格 Debian Crunch Bang 出现问题 尝试使用以下命令构建 cvblob 时 cd cvblob cmake Error CMake Error at cvBlob CMakeLists txt 20 find
  • NuGet 如何将属性应用于文件

    我正在创建 NuGet 包 我已经放入了两个文件content用户安装此软件包时将添加的文件夹 exe 和配置文件 另外我想更改这两个文件的 VS 项目属性 构建包时我需要做什么 当您说 应用属性更改 时 您是指文件系统属性 例如上次修改时
  • 通过 Xcode 发布时:下载的软件组件已损坏且无法使用

    在尝试通过 Xcode 发布 iOS 应用程序并通过大部分验证后 我收到以下错误 下载的软件组件已损坏且无法使用 https contentdelivery itunes apple com transporter repositories
  • 如何使用 Fabric.js 在画布上画一条线

    我正在使用 Fabric js 在画布上画一条线 这是我的代码 但我没有得到任何输出 Line click function alert Line canvas add new fabric Line 50 100 200 200 left
  • 使用 php 创建像 Twitter 或 Convore 这样的提及

    你好 我只是好奇 关于他们如何做事 我认为他们会做这样的事情 someone1 im stacking on stackoverflow RT someone2 hello guys what are you doing 在我以我的方式做之
  • 静态库 API 问题(std::string 与 char*)

    我以前没有使用过静态库 但现在我需要 设想 我正在 Unix 中编写一个控制台应用程序 我自由使用std string无处不在 因为这样做很容易 然而 我最近发现我必须在 Windows 中支持它 并且第三方应用程序需要 API 来连接我的
  • 使用 iText 检测动态 XFA

    我需要将预先填充的 PDF XFA 表单设置为只读 因为没有输入 例如文本 复选框 单选按钮等可以更改其值 对于常规 AcroForms PDF 和静态 XFA 表单 我可以通过调用来完成此操作setFormFlattening true
  • 为什么python的subprocess.call是这样实现的?

    subprocess模块 具有便捷的功能call 在2 6和3 1中都是这样实现的 def call popenargs kwargs return Popen popenargs kwargs wait 该函数的文档带有红色警告 内容如下
  • 多用户应用程序无需安装任何东西 - 允许并发用户写入的嵌入式数据库? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要创建一个应用程序 被多个用户同时使用 不需要any安装 有一个集中的数据存储 数据必须被存储inside公司网络 i 无权访问到公司内部数
  • 更新 UpdatePanel 内的标签

    我在更新面板中有一个标签和按钮 当我尝试从按钮单击上的标签获取值时 我从标签获取值 但是当我尝试将值设置为标签时 它不会发生 我检查了 JavaScript 错误 但没有任何错误 有人猜测可能是什么原因吗 我正在使用 dotnetnuke
  • 程序“[4432] iisexpress.exe”已退出,代码为-2147023895 (0x800703e9)

    我在使用 IIS Express 时遇到了非常令人沮丧的问题 当我开始调试时一切正常 但在几次请求后 IIS 挂起并崩溃 我的浏览器 Chrome 版本 37 0 2062 120 m 等待响应几秒钟 然后 IIS Express 停止运行
  • 在 webview android 中启用复制和粘贴

    是否可以从网络视图中选择文本然后进行复制和粘贴 有什么特殊的方法可以做到这一点吗 请帮助我 希望对你有帮助 public void selectAndCopyText try Method m WebView class getMethod
  • 如何在启用协程的改造界面中重试 API 调用

    我有一个用例 每当 API 调用中发生诸如互联网丢失或未知错误之类的一般错误时 需要显示带有重试按钮的错误 UI 当用户按下重试之前失败的 API 时 应该调用并恢复用户流程 迁移协程方法前的API接口 interface TodoServ
  • 如何更改单选按钮的文本

    我有一个单选按钮 需要根据用户输入动态更新 但正常情况下 val text and html 行不通的 如何使用 jQuery 或纯 JavaScript 更改单选按钮的文本 无线电输入没有文字 一切都是这样的
  • Go程序陷入死锁

    这是我的 Golang 程序 我正在使用它只是为了让我的概念正确 当我运行程序时 它陷入僵局 我不明白为什么 请有人指出出了什么问题吗 package main import fmt sync var wg sync WaitGroup f
  • 无法调用 DLL 导入条目、C# -> C++、EntryPointNotFoundException

    我正在尝试从 C 调用用 C 编写的自定义 DLL 中的函数 但是 我在代码分析期间收到警告 并在运行时收到错误 警告 CA1400 Microsoft 互操作性 正确 的声明 SafeNativeMethods SetHook 这样 它正