C#“非托管导出”[关闭]

2023-12-01

我一直在尝试在 Visual Studio 2010 pro/C# 项目中使用 Robert Giesecke 的扩展“非托管导出”。然而,我无法让它工作 - 当我检查导出的已编译 DLL 时,查看器(http://www.nirsoft.net/utils/dll_export_viewer.html)总是空的,似乎根本没有定义导出。

我几乎复制了示例并将构建/配置管理器/活动平台设置为 x86。我可以以某种方式检查执行所有操作的 MSBuild 任务是否实际运行吗?项目文件应该包含什么(对我来说它似乎是空的?)


我建议您以记录的方式执行此操作,而不是依赖不提供支持的作者的未记录的黑客行为。让我们举个例子:

namespace Publics {
    public class Class1 {
        public static void Run() { 
            // Stuff...
        }
    }
}

将新的 C++/CLI 类库添加到您的项目中。右键单击解决方案,添加,新建项目。打开“其他语言”节点、Visual C++、CLR,然后选择“类库”项目模板。右键单击新项目,属性,公共属性,框架和引用,单击添加新引用按钮。从“项目”选项卡中,选择要导出其方法的 C# 项目。

删除带有//TODO注释的预先生成的空类并编写这样的代码:

extern "C" __declspec(dllexport)
void __stdcall Example() 
{
    Publics::Class1::Run();
}

构建您的解决方案。通过在 DLL 上运行 dumpbin.exe /exports 检查示例函数是否已导出。您应该看到与此类似的内容:

      1    0 00001020 _Example@0 = _Example@0

除了名称和调用约定之外,您现在还有很多选择来调整导出的函数。如果您想导出实例方法而不是静态方法,您可以编写如下所示的函数:

extern "C" __declspec(dllexport)
void __stdcall Example() 
{
    Publics::Class1^ obj = gcnew Publics::Class1;
    obj->Run();
}

等等,如果您要详细说明这一点,则需要对 C++/CLI 语言有一定的了解。最后但并非最不重要的一点是,您也可能会发现您最初尝试使 Giesecke 的 IL 重写器工作时出了什么问题。否则,它使用与 C++/CLI 编译器用于导出托管方法完全相同的技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#“非托管导出”[关闭] 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud

随机推荐

  • 带有部分页面的客户端的 Outputcache 属性

    我创建应用程序菜单的部分页面 我正在使用 renderaction 调用菜单部分视图 我想通过这样做将这部分页面存储在客户端 OutputCache Duration 7200 Location OutputCacheLocation Cl
  • 如何更新 SWT 组合框中的项目列表?

    我有一个带有组合框的用户界面 每次组合要打开列表时 都必须刷新可以选择的项目列表 有没有什么方法 即添加一个侦听器来通知 UI Combo 即将打开 不幸的是 我无法观察模型在更改时更新列表 不幸的是 SWT 组件没有这样的方法 在 Swi
  • 理解 C 中变长数组的困难

    我正在读一本书 发现数组大小必须在声明时给出 或者在运行时使用 malloc 从堆中分配 我用 C 编写了这个程序 include
  • ajax通过jquery提交多个表单

    所以假设我有 3 种形式
  • Databricks - 如何将驱动程序日志复制到我的计算机?

    我可以在 databricks 驱动程序节点上使用 sh 命令查看日志 如何将它们复制到我的 Windows 计算机上进行分析 sh cd 事件日志 4246832951093966440 gunzip eventlog 2019 07 2
  • Java中内存地址存放在哪里

    Java中内存地址存放在哪里 我想了解的是如何存储类似以下内容的内容 我已经知道堆栈和堆之间的区别 但试图更深层次地挖掘 int i 5 Is i单独存放和5单独存储 然后建立映射 同样 我们说对于 32 位版本 最多可以有 4 GB RA
  • Java 并发:CAS 与锁定 [已关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在看书Java 并发实践 在第 15 章中 他们讨论了非阻塞算法和比较和交换 CAS 方法 据记载 CAS 的性能比锁定方法好得多 我想问那些已经使用过这两个概念并想听听您何时更喜欢其
  • 包含空格和特殊字符的 URL 的最佳实践

    我目前正在修改一个小型网络应用程序 该网络应用程序允许用户自己输入 指定类别 我注意到在数据库中 有很多类别包含空格和特殊字符 例如蛋糕和纸杯蛋糕 在前端 数据库以 URL 链接的形式显示所有用户定义的类别 用户可以单击它们来进一步查看该类
  • 创建钛模块时出现构建错误

    我创建了一个新的移动模块项目 但是当我尝试构建它时 出现以下错误 构建失败 C ProgramData Titanium mobilesdk win32 5 2 2 GA module android build xml 165 没有指定可
  • 在 Windows 上使用 -R 和 -rpath 开关进行链接

    我在 Windows XP 上使用 gcc 编译器 MinGW 我创建了一个 dll 库libdir dll比我尝试构建一个使用该库的程序 我不想将该 dll 文件放入 System 或 System32 文件夹中 也不想在 PATH 变量
  • 为对象定义索引器

    一个人可以制造一个物体iterable通过实施 Symbol iterator 但是我们如何才能推翻 的行为呢 操作员 例如 我有一个对象 里面有一个数组 我希望能够访问给定的索引 例如obj 3 那可能吗 example const Si
  • 从 tkinter 中的树视图获取数据

    我正在尝试从填充的 Treeview 中获取数据 self tree show headings self tree columns Pool ID Time Lat Lon Alt Spd hdop vdop pdop Sats Used
  • 为什么wcf客户端连接服务这么慢?

    我在使用WCF服务时遇到了性能问题 故事是这样的 我编写了一个自托管的 WCF 服务 该服务由控制台应用程序托管 我编写了一个简单的客户端来使用该服务 WCF服务运行后 客户端需要15秒以上的时间才能与服务建立连接 WCF 服务非常简单 就
  • 使用 group by 空指针从 sqlite 获取值

    我有一个表 其中有一些重复的记录 现在我正在获取记录而不排除重复的记录 我想获取不包括重复项的所有记录 并且从重复数据中我只想要一条记录 就像如果我有三个相同的记录我只想要一个记录 我的查询是这样的 这给出了空指针 Cursor dCurs
  • Pyspark:更改嵌套列数据类型

    我们如何更改 Pyspark 中嵌套列的数据类型 例如 如何将 value 的数据类型从 string 更改为 int 参考 如何在pyspark中将Dataframe列从String类型更改为Double类型 x 12 y p name
  • 获取视图的CGRect

    我正在使用 RectGetter 来获取CGRect of a View 像这样 Text Hello background RectGetter rect self rect struct RectGetter View Binding
  • Wildfly 8.1 ClassNotFound org.apache.http.conn.ClientConnectionManager

    我很难让一个池连接管理器为 Resteasy 客户工作 在 Wildfly 8 1 上部署 import org apache http client HttpClient import org apache http impl clien
  • Codeigniter 会话从头视图文件检查

    我是个新手 刚刚开始使用 Codeigniter 并且遇到了一些关于会话的困惑 我想要实现的是 就像在常规 php 中一样 我想通过使用检查会话数据的标头包含文件来检查用户是否登录 我不想在将数据传递到视图文件时在每个控制器中检查 写入检查
  • Android:AdMob onClickListener

    我显示到我的 Android 应用程序中AdMob s横幅 我希望当用户点击横幅时它就消失了 我已经尝试过代码AdView setOnClickListener但它不起作用 编辑 这是代码 private void visual banne
  • C#“非托管导出”[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我一直在尝试在 Visual Studio 2010 pro C 项目中使用 Rober