问题标签 [managed]
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.
.net - 为什么 .NET File.Delete() 会因 UAC 和 requireAdministrator=True 而失败?
这让我发疯。我搜索了整个 StackOverflow 并阅读了有关 UAC 的所有信息。但我仍然遇到问题。
使用 VS 2008,我有一个简单的程序,除此之外什么都不做:
EXE 有一个适当的清单,其中 requireAdministrator=True。编译后,应用程序图标会收到盾牌图标。当我启动应用程序时,以管理员或标准用户身份登录,我收到“您是否希望以下程序进行更改...”确认对话框。此外,我在 EXE 上使用了代码签名证书。
运行应用程序时,我得到以下行为:
当我以管理员身份登录时运行应用程序时,该文件被删除。
但是,当以标准用户身份登录时,我会收到 UAC 提示并输入管理员密码,但在执行删除操作时会收到“文件访问被拒绝”错误。
谁可以给我解释一下这个?我认为清单中的 requiresAdministrator=True 提升了流程。但我仍然无法删除系统文件。
谢谢。
com - 从非托管 C++ 调用托管代码(c#)的最佳方法
我们开发了 as/w 架构,由 C# 开发的一组对象组成。他们广泛使用事件来通知客户端状态变化等。
最初的目的是允许遗留代码通过 COM 互操作服务使用这些托管对象。这在设计规范中很容易编写,但是,我发现实际实现它更有问题。我已经搜索了好几个小时来寻找使用这种方法处理事件的良好示例。在我们沿着这条道路前进之前,我想确保 COM 互操作是允许遗留代码调用我们的新代码的最佳方式。
似乎有几个不同的选项:1)COM 互操作,2)编写非托管包装类 3)使用 /clr 编译器开关来启用托管对象的调用,4)使用某种反向 pInvoke 调用。我有什么遗漏吗?
每个选项都有其优点和缺点,我想知道最好的方法是什么。以下是针对每个问题的具体问题/评论
COM INTEROP - 事件处理似乎是一个障碍。我们使用具有变量类型的事件作为参数。事件参数可能具有事件 ID 和对象。根据事件 ID,对象将属于某种类型。这可以通过 COM 互操作来处理吗?许多暴露的对象都有属性。您不能在接口中声明属性,因此所有属性都需要相应的 get/set 方法。
WRITE UNMANAGED WRAPPER - 我认为这意味着使用 /clr 选项创建 DLL 以允许创建和调用托管对象并公开非托管对象。将这些不受管理的客户端。我以前没有这样做过。这有什么好处/缺点?
使用 /CLR 开关 - 我理解这意味着添加对托管对象的支持。这种方法的缺点是什么?此选项是否支持上述事件?我们可以说,“这是托管库。将 /clr 编译器选项与您的旧代码一起使用并使用它吗?” 我不知道这件事的后果。是否有一个很好的例子来说明它是如何工作的?(肯定有,只是没找到)
使用反向 PINVOKE - 我不确定这到底是如何工作的,但据我所知,这不是一个可能有效的解决方案。
那么,找到正确方向的决策树是什么样子的呢?任何帮助表示赞赏。
- DP
c++-cli - C++/CLI 托管线程清理
我正在为 MySQL 嵌入式服务器编写一个托管 C++/CLI 库包装器。mysql C 库要求我为将要使用它的每个线程调用 mysql_thread_init(),并为使用它后退出的每个线程调用 mysql_thread_end()。
调试任何给定的 VB.Net 项目我可以看到至少七个线程;我想如果 VB 本身没有显式创建工作线程(对此有任何确认?),我的库将只看到一个线程。但是,如果需要,我需要我的库的客户端能够创建工作线程,所以我的库必须在某种程度上是线程感知的。
我能想到的第一个选项是在我的类中公开一些“EnterThread()”和“LeaveThread()”方法,这样客户端代码将在开始和退出它们的 DoWork() 方法之前显式调用它们。如果 (1) .Net 不会“神奇地”创建用户不知道的线程,并且 (2) 用户足够小心以在某种 try/finally 结构中调用方法,这应该可以工作。
但是,我不太喜欢让用户像这样手动处理事情,我想知道我是否可以帮她处理这件事。在纯 Win32 C/C++ DLL 中,我确实有 DllMain DLL_THREAD_ATTACH 和 DLL_THREAD_DETACH 伪事件,我可以根据需要使用它们来调用 mysql_thread_init() 和 mysql_thread_end(),但在 C++/CLI 管理中似乎没有这样的事情代码。以牺牲一些性能为代价(我认为不多),我可以使用 TLS 来检测“来自新线程的使用”情况,但我可以想象没有线程退出情况的机制。
所以,我的问题是:(1).net 可以在用户不知道的情况下创建应用程序线程吗?(2) 有没有我可以使用类似于托管 C++/CLI 中的 DLL_THREAD_ATTACH / DLL_THREAD_DETACH 的机制?
提前致谢。
c++ - fread 速度 受管理 不受管理
好的,所以我正在将二进制文件读入我用 malloc 分配的 char 数组中。(顺便说一句,这里的代码不是实际代码,我只是在现场写出来演示的,所以这里的任何错误可能都不是实际程序中的错误。)这种方法每秒读取大约 5000 万字节。
主要的
read_whole_buffer
我用托管 c++ 编写了类似的东西,我相信它使用文件流和函数 ReadByte() 逐字节读取整个文件,它以每秒大约 5000 万字节的速度读取。
此外,我的计算机中有一个 sata 和一个 IDE 驱动器,我已经从两者中加载了文件,根本没有任何区别(这很奇怪,因为我假设 SATA 读取速度比 IDE 快得多.)
问题
也许你们都可以理解为什么这对我没有任何意义。据我所知,将整个文件读入数组应该比逐字节读取要快得多。最重要的是,通过测试,我发现托管 c++ 速度较慢(只有在您对代码进行基准测试并且需要速度时才会注意到这一点。)
所以
为什么我在这两个应用程序上以相同的速度阅读。5000万字节从一个文件到一个数组是不是很快?
也许我的主板正在瓶颈我?伊瑟,这似乎没有多大意义。
是否有更快的方法将文件读入数组?
谢谢。
我的“脚本计时器”
以毫秒分辨率记录开始和结束时间......最重要的是它不是计时器
读取缓冲区的东西
eclipse - 在为项目构建不同的 Eclipse CDT 共享资源文件夹中
我有一组 Eclipse c 项目,它们都将引用一个公共共享代码库(同一文件夹中的 .c 和 .h 文件的混合),但将在每个项目的基础上以不同的方式构建该代码。
可以从每个项目中编辑公共代码库,但这些编辑将是跨所有项目进行的修复。除了通过定义的构建选项外,每个项目的通用代码不会有分歧。
如果我为这个库创建一个项目,这意味着我不需要构建一个库。我需要将生成的目标文件放到为其构建的项目中。所以 ac/c++ 项目没有意义。
公共代码将被签入到一个颠覆回购(每个项目也一样)。我可以使用“新文件夹 -> 链接资源”,但我更愿意让项目独立于开发人员碰巧使用的目录结构。
有没有一种干净的方法可以做到这一点?
谢谢。
arrays - C# -- 从指针创建托管数组
我正在尝试从字节数组创建一个托管数组。我目前有问题,但我想优化。这是我想要工作的一些代码:
请让我知道如何处理这些问题。
-亚伦
c# - 管理托管 (C#) 和非托管 (C++) 对象的析构函数
我在 ac# dll 中有一个托管对象,它维护一个匿名整数句柄,该句柄指向 c++ dll 中的非托管对象。在 c++ dll 中,匿名整数在 std::map 中用于检索非托管 c++ 对象。通过这种机制,我可以使用匿名整数句柄在托管对象和非托管对象之间保持松散的关联。
在托管对象的 finalize 方法(析构函数)中,我调用了非托管 dll 来删除非托管对象。
c# 程序运行时一切正常,但程序退出时出现问题。因为我无法控制托管端的删除操作顺序,所以在任何托管对象之前从内存中删除非托管 dll。因此,当托管对象的析构函数被调用(它反过来调用非托管析构函数[至少间接地])时,非托管对象已经被删除并且程序崩溃了。
那么如何安全地删除与 ac# 程序中的托管对象相关联的外部 c++ dll 中的非托管对象。
谢谢
安德鲁
c++ - 从托管 C++ 访问本机 C++ 数据
我有一个本机 C++ 库,它使用大型静态缓冲区(它从设备获取数据)。
假设这个缓冲区是这样定义的:
现在我想将此缓冲区的一部分公开给托管 C++,例如,当库存储 1000 字节的新数据时,LargeBuffer[5000]
我想对托管 C++ 代码执行回调,传递一个指针,LargeBuffer[5000]
以便托管 C++ 可以访问那里有 1000 字节的数据(如果可能,直接,即不复制数据,以实现最大性能)。
让托管 C++ 代码访问此本机数组中的数据的最佳方法是什么?
visual-studio - 如何让 Visual Studios 构建系统了解托管 dll 的非托管依赖项?
在构建托管代码时,Visual Studio 正确(并且递归地)将引用的托管项目的 dll 复制到正在构建的项目的输出文件夹中。
但是,如果这些引用之一是依赖于非托管 dll 的托管 DLL,则这些非托管 DLL 不会复制到输出文件夹,即使它们在同一解决方案中的相应项目被列为托管 DLL 的依赖项。
我意识到可以通过让所有项目使用相同的输出文件夹来解决这个问题。对于大多数项目,我们已经这样做了,但我们更喜欢将单元测试输出文件夹分开,这会导致使用托管 Dll 和非托管依赖项的单元测试出现上述问题。
我们现在使用的解决方案是一个预构建事件来复制必要的 DLL,但这会浪费时间并且容易出错,因为每个使用托管 DLL 的项目都需要重复它。
因此,我想知道是否有办法让构建系统了解它应该在决定复制托管 DLL 时始终复制托管 DLL 的非托管依赖项?
.net - 如何在混合应用程序中进行异常处理?(使用非托管 DLL 的托管应用程序)
是否可以在非托管 DLL 中引发异常并在托管应用程序中处理它?
我的非托管 C++ DLL 会在出现错误时抛出异常,它们应该在调用的可执行应用程序中处理。
这以前可行,但现在应用程序使用不同的标志(/clr等)编译,因为我们需要使用一些托管代码。当抛出异常时,我收到一个 System.ExecutionEngineException ,即使在我的调用 exe 中使用 catch(...) 似乎也没有被捕获。
我已经看到编译器选项 /clr 暗示 /EHa 用于异常处理,但据我现在理解,这似乎是选择的选项。
是否有任何其他替代方法(编译器/链接器设置)可以在模块(DLL/exe)边界上抛出和捕获异常?
谢谢你的支持!马可