Tag: native

访问Microsoft.Win32.UnsafeNativeMethods?

Microsoft在.NET框架中包含了一个非常好的Windows API包装器。 它存储在Microsoft.Win32.UnsafeNativeMethods , Microsoft.Win32.SafeNativeMethods和Microsoft.Win32.NativeMethods中。但遗憾的是,它们无法访问,因为它们被声明为私有。 有没有办法轻松访问它们?

C#/ Native:使用SCSI PassThrough读取硬盘串口

我编写了三种不同的方法,使用本机CreateFile和DeviceIoControl调用来检索HDD序列号(而不是型号)。 第一个使用SMART ,第二个使用Storage Query ,第三个使用SCSI PassThrough 。 我的大多数代码都基于此线程的内容(带有一些修复和改进)。 以下是我使用diskid32实用程序获得的结果: Trying to read the drive IDs using physical access with admin rights Drive Model Number________________: [ST975XXXXX] Drive Serial Number_______________: [ 6WS2XXXX] Trying to read the drive IDs using physical access with zero rights Product Id = [ST975XXXXX] Serial Number = [6WS2XXXX] Trying to read the drive […]

C#deezer native api:适应C#

我正在尝试使用C#类将C ++本机api包装到CLI C#类中。 似乎有一些问题(它确实接近工作)并希望找到问题的一些帮助。 这是包装器的代码 using System; using System.Collections; using System.Runtime.InteropServices; // make this binding dependent on WPF, but easier to use using System.Windows.Threading; // http://www.codeproject.com/Articles/339290/PInvoke-pointer-safety-Replacing-IntPtr-with-unsaf namespace Deezer { #region Enums public enum CONNECT_EVENT_TYPE { UNKNOWN, /**< Connect event has not been set yet, not a valid value. */ USER_OFFLINE_AVAILABLE, /**< User logged in, and […]

从本机dll生成C#DLLImport声明

你知道一个软件从一个本机DLL自动生成C#代码(在.cs中有[DllImport]属性),以便在C#代码中使用这个DLL吗?

.net中的转换:本机Utf-8 托管字符串

我创建了这两个方法来将Native utf-8字符串(char *)转换为托管字符串,反之亦然。 以下代码完成了这项工作: public IntPtr NativeUtf8FromString(string managedString) { byte[] buffer = Encoding.UTF8.GetBytes(managedString); // not null terminated Array.Resize(ref buffer, buffer.Length + 1); buffer[buffer.Length – 1] = 0; // terminating 0 IntPtr nativeUtf8 = Marshal.AllocHGlobal(buffer.Length); Marshal.Copy(buffer, 0, nativeUtf8, buffer.Length); return nativeUtf8; } string StringFromNativeUtf8(IntPtr nativeUtf8) { int size = 0; byte[] buffer = {}; do { […]

如何确定DLL是托管程序集还是本机(防止加载本机DLL)?

原标题:如何防止从.NET应用程序加载本机dll? 背景: 我的C#应用​​程序包括一个插件框架和通用插件加载器。 插件加载器枚举应用程序目录以识别插件dll(实质上它此时搜索* .dll)。 在同一个应用程序目录中是一个本机(Windows,非.NET)dll,间接地,其中一个插件dll依赖于它。 插件加载器盲目地假设native.dll是.NET程序集dll,只是因为它只检查文件扩展名。 当它尝试加载本机dll时,抛出exception: “无法加载文件或程序集’native.dll’或其依赖项之一。模块应该包含程序集清单。” 如果插件加载失败,我基本上创建了一个诊断报告,所以我试图避免让这个日志填满关于无法加载本机dll的消息(我甚至不想尝试)。 问题是: 是否有一些.NET API调用,我可以用来确定二进制文件是否恰好是.NET程序集,以便我不会尝试加载本机DLL? 也许从长远来看,我会将我的插件移动到一个子目录,但是现在,我只想要一个解决方案,不涉及在我的插件加载器中硬编码“native.dll”名称。 我想我正在寻找某种静态的Assembly.IsManaged()API调用,我忽略了……大概没有这样的API存在?

将.NET App转换为x86本机代码

有一个完全用C#编写的程序,它以.NET Framework 2.0为目标。 有没有办法我可以以某种方式编译(翻译)托管EXE到本机的EXE,因此它可能是.NET不可知的? 我知道可能有商业产品用于此目的……但它们有点贵。 问题是我们要在没有安装.NET Framework的情况下在运行Windows XP的计算机上部署该程序。 还要求程序的大小不得超过500Kb(最大1Mb),因为它是从Web服务器下载的(现在大小为255Kb)。 这就是为什么我们无法将完整的.NET FX(甚至是简化的)附加到下载程序的文件中。 显然,这是一个可怕的软件工程错误应该早先检测到并避免,所以我们可以使用像C ++这样的本机技术。 我们现在尝试过Novell的Mono–一个用于Linux,MAC和Windows的.NET Framework的开源实现。 Mono由C#编译器,IDE,运行时(CLR)和类库程序集组成(如System.dll和mscorlib.dll – 非常类似于安装到GAC的.NET的类库程序集)。 我们尝试做的是找到CLR文件并将它们与我们程序的文件和一些程序集一起发送。 这样,可以通过在用户的计算机上运行“mono program.exe”(命令提示符)来调用该程序。 除了给最终用户CLR文件(mono.exe和mono.dll)的这种使用带来的不便之外,总共大约2.5 Mb,远远大于所需的500 Kb甚至1 Mb。 所以,我们没有其他选择,只能通过编译器将我们的.NET应用程序转换为本机应用程序,但问题仍然存在 – 我们应该使用什么编译器以及我们在哪里可以找到… 目前我偶然发现了微软研究院的Singularity OS项目。 它是一个开源研究操作系统,用托管代码编写(至少部分)。 Singularity OS包含一个Bartok编译器,操作系统使用该编译器将托管程序转换为本机程序(x86 32位)。 应该注意的是,Bartok无法将.NET 2.0的所有方面都转换为本机代码,但大部分都是如此。 但是我还没有学会如何使用奇点…… 如果你能提供一些有关问题的有用提示和建议,你自己使用Singularity OS和Bartok Compiler的经验,或者我忽略了解决问题的其他方法以及解决问题的方法,我将非常感谢你。 非常感谢你提前! 最后,使用Mono的Full AOTfunction(在Callum Rogers的建议下)我设法生成了缺少CLI头的program.exe.dll。 所以它看起来像一个原生的DLL。 但是,我无法弄清楚如何将该DLL转换为exe或使其运行。 此dll似乎也没有暴露任何感兴趣的function,如主要function。

在C / C ++中编写DLL以实现.Net互操作性

在我的C#应用​​程序中,我想在C中编写一部分代码。我计划编写一个可与​​.Net互操作的DLL。 我怎样才能做到这一点?