C++/C# 最基本的Marshal和Ptr】的更多相关文章

Vidyo32.VidyoClientInEventLogin Login = new Vidyo32.VidyoClientInEventLogin(); Login.portalUri = this.tbxIP.Text.Trim(); //"http://kaunas.vidyo.scandihealth.net"; Login.userName = this.tbxID.Text.Trim(); //"test-sa3"; Login.userPass =…
Vidyo32.VidyoClientInEventLogin Login = new Vidyo32.VidyoClientInEventLogin(); Login.portalUri = this.tbxIP.Text.Trim(); //"http://kaunas.vidyo.scandihealth.net"; Login.userName = this.tbxID.Text.Trim(); //"test-sa3"; Login.userPass =…
static void Main(string[] args) { ,,,}; ,,,}; IntPtr pt = Marshal.AllocHGlobal(a.Length); //从source数组的startIndex下标开始复制length个对象到ptr; Marshal.Copy(b,,pt+,b.Length); //从ptr复制length个对象到目标数组的,从目标数组的startIndex开始写入. Marshal.Copy((pt+),a,,); unsafe { byte*…
补充过程中~ 感觉应该是C#调用非托管的比较专门的class 例1. public struct ImageDataMsg { public char DataType; public int Srv_index; public char ConvertType; //这个个地方要指定长度,这样就可以的德奥结构体的正确长度了 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public int[] VecLayer;//需要那几个图层.…
原文:Marshal UTF8 Strings in .NET Marshal UTF8 Strings in .NET Wow, what a pain in the butt. .NET strings are stored internally as UTF16, not UTF8, so if you're marshaling strings to and from a library that wants strings as UTF8, you have to manually m…
在两个不同的实体(两个线程或者进程甚至机器.在Managed和Unmanaged之间)进行方法调用和参数传递的时候,具体的调用方法和参数的内存格式可能需要一定的转换,这个转换的过程叫做Marshal. Marshal就是把一个结构(类)序列化成一段内存,然后送到另一个进程(.net中Application domain)中供另一个进程中的函数使用.比如你的一个结构 struct{Pen pen;}s; s是一个指向已有的Pen对象的引用,当你把s传给本进程中的一个函数f时,f可以很容易地找到pe…
海康威视提供的ipserver可以记录DVR设备的IP地址,并提供一个7071的端口给客户端查询用,我们在c#程序中可以用海康SDK包中的NET_DVR_GetDVRIPByResolveSvr函数来查询,程序中对这个函数的声明为: // 通过解析服务器,获取设备的动态IP地址        [DllImport("HCNetSDK.dll")]        public static extern bool NET_DVR_GetDVRIPByResolveSvr(string s…
C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword) +BIT祝威+悄悄在此留下版了个权的信息说: C#申请一个大数组(Use a large array in C#) 在C#里,有时候我需要能够申请一个很大的数组.使用之.然后立即释放其占用的内存. Sometimes I need to allocate a large array, use it and then release its memory…
public class BinaryHelper { /// <summary> /// 将对象序列化为byte[] /// 使用IFormatter的Serialize序列化 /// </summary> /// <param name="obj">需要序列化的对象</param> /// <returns>序列化获取的二进制流</returns> public static byte[] FormatterO…
傻了吧唧的装双系统.成功的干崩了原本的系统.现在重装VS.闲的没事胡扯几句. WindowsAPI在每一台Windows系统上开放标准API供开发人员调用.功能齐全.在这里只介绍三个部分. 1.利用API控制鼠标键盘. 2.对外部程序的读写和监听 3.对外部程序窗口的改动. 外部程序的意思就是.假设我的程序是360.辣么我能控制腾讯QQ客户端啥的. API的宏.以下任何常量和函数都可以在 const int MOUSEEVENTF_MOVE = 0x0001; // 移动鼠标  const in…
C#图片处理常见方法性能比较 来自:http://www.cnblogs.com/sndnnlfhvk/archive/2012/02/27/2370643.html   在.NET编程中,由于GDI+的出现,使得对于图像的处理功能大大增强.在文通过一个简单黑白处理实例介绍在.NET中常见的图片处理方法和原理并比较各种方法的性能. 黑白处理原理:彩色图像处理成黑白效果通常有3种算法: (1).最大值法: 使每个像素点的 R, G, B 值等于原像素点的 RGB (颜色值) 中最大的一个: (2)…
一. 结构体的传递 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int osVersion; int majorVersion; int minorVersion; int buildNum; int platFormId; ]; }OSINFO; // 1. 获取版本信息(传递结构体指针) JNAAPI bool GetVersionPtr( OSINFO *info ); /…
using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; namespace ZNLGIS { public class ImageClass { //图片裁剪 public static Image<Bgr, Byte> Cut(Image<Bgr,Byte> image ,Rectangle rectangle) { System.Drawi…
 1.从“文件”菜单中,选择“新建”,然后选择“项目…”. 2.从“项目类型”窗格中选择“Visual C++”下的“Win32”. 3.从“模板”窗格中,选择“Win32 控制台应用程序”. 4.为项目选择一个名称,如“MathFuncsDll”,并将其输入“名称”字段.为解决方案选择一个名称,如“DynamicLibrary”,并将其输入“解决方案名称”字段. 5.按“确定”启动 Win32 应用程序向导.在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”. 6.从“Win32…
本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素数据定义的图像的对象. 利用C#类进行图像处理,最方便的是使用Bitmap类,使用该类的GetPixel()与SetPixel()来访问图像的每个像素点.下面是MSDN中的示例代码: public void GetPixel_Example(Pa…
c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using  system;using  System.Runtime.InteropServices; namespace  webcam{///  ///  avicap  的摘要说明.///  public  class  showVideo{//  showVideo  calls[DllImport("avicap32.dll")]  public  stati…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; namespace Interop { class Program { [DllImport("kernel32.dll", EntryPoint = "Beep"…
C# 调用传统的 API 动态链接库,是.NET开发经常被讨论的问题. 比如有这么一个动态链接库(delphi 语言): library DelphiDLL; uses SysUtils, Classes, Windows; {$R *.res} function TestMyFunction( a: Integer ): Integer; stdcall; begin Result := a * a; end; exports TestMyFunction; begin end. 在C#中调用…
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using ImageOleLib; using DynamicGifLib; using System.ComponentModel; using System.Runtime.InteropServices; using System.Diagnostics;…
注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带参数安装服务的,在此感谢猿友KOFIP的指教和代码,详情请见回复. ------------------201506182056原文------------------ 市面上常见的安装一个服务的方法大概有这么几种: 用Process类调用sc.exe.Installutil.exe等外部工具进行安…
之前做Opengl程序,用的的C#的SharpGL这个库,里面有各种奇怪绑定的函数,比如原型为: void glInterleavedArrays(uint format, int stride, void * pointer); 的函数被他绑定成: private static extern void glInterleavedArrays(uint format, int stride, int[] pointer); 然后我就被逼着学习了各种float[] 转 int[] 的方法,比较他们…
使用C#进行图像处理的几种方法 本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素数据定义的图像的对象. 该类的主要方法和属性如下: 1.       GetPixel方法和 SetPixel方法:获取和设置一个图像的指定像素的颜色. 2.       PixelFormat属性:返回图像的像素…
调用Marshal.AllocHGlobal必须调用 Marshal.FreeHGlobal(ptr)来手动释放内存,即使调用GC.Collect();方法也无法释放,导致内存泄露!!…
http://www.cnblogs.com/xrwang/archive/2010/01/26/TheInteractionOfOpenCv-EmguCvANDDotNet.html 前言 在.net中使用OpenCv和EmguCv时,必须在三者支持的图像格式之间进行转换..net中用Bitmap类来承载图像,OpenCv中用IplImage指针来承载图像,EmguCv中用Image<TColor,TDepth>来承载图像.本文主要讲述如何在IplImage.Image<TColor,…
严格来说这篇文章算不上C++范围的,不过还是挂了点边,还是在自己的blog中记录一下吧. C++中使用指针是家常便饭了,也非常的好用,这也是我之所以喜欢C++的原因之一.但是在C#中就强调托管的概念了,指针就不用想了.本来如果就在C#的世界里面写代码,也还算舒服,但是万事万物总有联系,这不,现在公司的另外一个用C#作的项目就碰到问题了,要调用之前用C++写的一个DLL中的一些函数,很多函数的参数都是指针类型的,这下可麻烦咯,公司里做C#的都是刚起步,C++又只有我最熟悉,这项技术研究工作又光荣的…
什么是Net互操作?.Net不能直接操作非托管代码,这时就需要互操作了.   c#中调用非托管c++函数,此函数又包含指向某个结构的指针,譬如指向c#中的byte数组.对于这样的参数,考虑到非托管变量不能直接在托管代码中使用,那么应该如何去处理呢? 上例子: private string getSelText(int start,int Scount) { try { StringBuilder a = new StringBuilder(Scount); IntPtr pdf_pag = FP…
转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用.本篇文章将引导你快速理解这个调用的过程. 步骤 1. 创建一个CSharpInvokeCPP的解决方案: 2. 创建一个C++的动态库项目: 3. 在应用程序设置中,选择“DLL”,其他按照默认选项:…
转自 http://blog.sina.com.cn/s/blog_628821950100wh9w.html C#进行图像处理的几种方法 本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素数据定义的图像的对象. 利用C#类进行图像处理,最方便的是使用Bitmap类,使用该类的GetPixel(…
c++的写法是这样的: LRESULT CPictureQueryDlg::OnQueryPicNty(WPARAM wp, LPARAM lp) { EnableWindow(TRUE); BYTE *pbyMsg = (BYTE*)lp; // 得到当前页数目 m_dwCurCount = *reinterpret_cast<DWORD*>(pbyMsg); // 得到总数量 m_dwTotalCount = *reinterpret_cast<DWORD*>(pbyMsg +…
在实际项目工作中,经常用到C#调用C++ 或者C编写的dll文件. dll支持一般函数声明和类的定义声明,但是一般为了简化,都是 采用函数声明的方式.这里主要并不是写 dll的编写. 先在vs中创建一个dll项目 添加一个新的cpp文件 测试代码如下: struct Student   //定义了一个结构体,结构体中包含了基本类型,字符串类型和数组,基本上能满足很多情况了{ int no; char name[10]; int score[4];}; extern "C" __decl…