【从托管C#释放非托管内存及其指针】教程文章相关的互联网学习教程文章

关于C#调用非托管动态库方式的性能疑问【代码】【图】

最近的项目中,因为一些原因,需要C#调用非托管(这里为C++)的动态库。网上喜闻乐见的方式是采用静态(DllImport)方式进行调用。偶然在园子里看到可以用动态(LoadLibrary,GetProcAddress,FreeLibrary)方式调用非托管动态库,于是就想着比较一下静态和动态方式的性能(主要想用运行时间来体现)。  以下为源码:  1.主程序源码: 1using System;2using System.Diagnostics;3using System.Text;4using System.Threading;5 ...

(转载)C#调用非托管Win 32 DLL【图】

转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用。本篇文章将引导你快速理解这个调用的过程。 步骤1. 创建一个CSharpInvokeCPP的解决方案: 2. 创建一个C++的动态库项目: 3. 在应用程序设置中,选择“DLL”,其他按照默认选项:最...

具有从C#到非托管驱动程序的嵌入式指针的编组结构【代码】

我正在尝试使用P / Invoked DeviceIoControl()调用将C#(.NET Compact Framework 3.5)与Windows CE 6 R2流驱动程序接口.对于IOCTL代码之一,驱动程序需要一个DeviceIoControl输入缓冲区,该缓冲区是以下包含嵌入式指针的非托管结构:typedef struct {DWORD address;const void* pBuffer;DWORD size; // buffer size } IOCTL_TWL_WRITEREGS_IN;我在C#中将结构定义为:[StructLayout(LayoutKind.Sequential)] public struct IoctlWriteR...

C#-.NET Web服务-如何调用非托管C dll【代码】

我需要从.NET Web服务(asmx或WCF)调用dll(非托管c). 从Web服务中调用dll很简单,并且可以按预期工作. 但是,当我对Web服务进行负载测试时,就会出现问题. (错误代码0xC0000374-“内部错误,通常涉及堆损坏”). DLL的所有者通知我,如果同时发送2个或更多调用,则该DLL在多线程环境中不可靠. 在传统的Windows应用程序中,我将通过实现一个singleton类来保护dll来解决此问题.在Web服务实现中是否有推荐的方法来实现这一目标?解决方法:如果只...

从非托管C以无痛方式调用托管C#函数(无返回值)?【代码】

我的任务是维护遗留的非托管C系统.我没有访问整个系统的源代码,但是我有许多扩展dll的源代码,当这些扩展dll与核心系统包含在同一目录中时,将被加载而不是内置默认值. 过去,我曾使用扩展程序进行小的更改而没有问题.但是,现在的问题是,我被要求检修具有大量额外功能的扩展dll之一.在C#中创建此额外功能的速度(开发时间)和可维护性将大大提高(我们的团队主要由C#开发人员组成). 扩展dll仅具有两个由核心系统调用的功能.这两个函数采用...

跨C/C++(非托管)和托管C#代码共享通用定义

我有一组由C#托管组件和非托管C/C++组件使用的结构定义.现在,相同的结构定义分别存在于C/C++和C#代码中-导致重复和相关的混乱.维护可以在C#和C/C++中使用的单个定义的最佳方法是什么?谢谢!阿米特 附注:我是一名C/C++人士,因此,如果有一种明显的方法可以做到,那么我可能会完全想不到!解决方法:显然,我不熟悉您的项目,但是您是否考虑过在C++/CLI中为您的库构建托管桥?借助“ It Just Works”,C/C++LI编译器可以为您完成黑客攻击...

在非托管C程序中实现C#DLL COM文件【代码】

这是我提出的另一个参考问题:How to call managed C++ methods from Un-managed C++ 我已经成功创建了一个C#COM文件.现在,我需要一个简单的解释,说明如何在非托管C中实现它. 我正在关注此示例,但是c部分很薄弱.http://www.codeproject.com/Articles/7859/Building-COM-Objects-in-C 这是我的COM文件using System; using System.Runtime.InteropServices; using System.Collections.Generic; using System.Linq; using System.Text...

C#-将非托管字符**编组为托管字符串[]【代码】

我在DLL文件中有一个C函数(它是使用“多字节字符集”选项编译的):_declspec(dllexport) void TestArray(char** OutBuff,int Count,int MaxLength) {for(int i=0;i<Count;i++){char buff[25];_itoa(i,buff,10);strncpy(OutBuff[i],buff,MaxLength);} }我想接下来必须是C#原型:[DllImport("StringsScetch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]private static extern void TestArray([Mars...

如何使用st#:: vector作为C#参数调用非托管C函数?【代码】

出于性能原因,我有一个C#前端和一个C后端.现在我想调用一个C函数,例如:void findNeighbors(Point p, std::vector<Point> &neighbors, double maxDist);我想要的是一个C#包装函数,如:List<Point> FindNeigbors(Point p, double maxDist);我可以将像Point []这样的平面数组传递给非托管C dll,但问题是,我不知道要分配多少内存,因为我不知道函数将返回的元素数量… 是否有一种优雅的方式来处理这个没有内存泄漏的麻烦? 谢谢你的帮助...

将矢量/数组从非托管C传递到C#【代码】

我想从非托管C传递大约100 – 10,000点到C#. C面看起来像这样:__declspec(dllexport) void detect_targets( char * , int , /* More arguments */ ) {std::vector<double> id_x_y_z;// Now what's the best way to pass this vector to C# }现在我的C#端看起来像这样:using System; using System.Runtime.InteropServices;class HelloCpp {[DllImport("detector.dll")]public static unsafe extern void detect_targets( stri...

javascript – 作为就业申请的一部分,在c#MVC3(非托管)的应用程序上书写签名

我正在尝试找到类似于http://www.tenstreet.com的解决方案.我试过环顾互联网和sourceforge,但我发现的一切都是关于加密数字签名(我将使用,但不是我缺乏的),而不是图像数字签名.我发现了很多托管解决方案,但由于我们业务的性质,托管解决方案是不可能的(我工作的地方几乎必须在内部完成). 如果这没有意义,我会解释背景.我们是一家货运公司,我们的驱动程序应用程序的一部分是签名发布表.我们目前需要传真该表格以获取签名并等待其传真...

将非托管c类库暴露给c#

事实上,我有两个未损坏的c库,其中一个使用另一个.两者都很大,所以重写对我来说不是一个选择. 我读了一些关于创建托管c库的东西,它围绕非托管代码.但我不知道如何开始,以及如何在一个项目中结合所有这些东西…… 有没有一步一步的指南或如何做到这一点的易于理解的例子? TIA解决方法:您可以考虑使用ATL为C代码编写COM包装器.我将在blog post中展示如何执行此操作.这就是Microsoft公开他们在C中编写的功能的方式(例如Windows 7库功能...

将非托管C代码转换为C#

任何指向工具/实用程序的人都可以将非托管c转换为c#?我已经尝试了http://www.pinvoke.net/网站,但我无法在此question上找到对此API AddUsersToEncryptedFile的引用.解决方法:一般来说这很难,因为C提供的功能与C#不同:模板,朋友,零终止字符串,非托管指针,COM等,更不用说解析C是一个工作的婊子. 要做到这一点,你需要一个具有名称和类型解析的完整C解析器,一组关于如何将每个构造(有问题或无问题)转换为等效C#代码的想法,将这些想法...

C#中的非托管C类

我可以从C#代码中实例化和“使用”非托管C类(比如使用DllImport等)吗?解决方法:在Windows上,您可以使用COM interop来使用C.但是,这不适用于Linux / Mac OS X. 另一种方法是在C类周围公开一个C包装器(C中的外部“C”).这是必要的,因为DllImport期望C ABI. 编辑:第三个替代方案是C++/CLI,即编译.Net的C代码.这也是一个仅限Windows的解决方案.

c# – 包装托管代码以供非托管使用【代码】

我们有一个很大的C项目,它被编译为本机非托管代码.我们需要使用托管代码中的一个功能,但我们不想在/ clr中编译整个项目. 所以我创建了一个DLL,有一个名为B的ref类,它在导出的本机类A中公开.问题是我得到了一个C1190:由于vcclr.h包含,托管目标代码需要’/ clr’选项. 我想知道是否有办法创建某种在非托管方法中具有托管代码的接口. 这是我的代码:#pragma once #include "EX_Port.h" #include <vcclr.h>ref class B;class EX_API A...

托管 - 相关标签