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 = this.tbxPwd.Text.Trim(); //"test-sa3";

int size = Marshal.SizeOf(Login);

IntPtr ptr = Marshal.AllocCoTaskMem(size);

Marshal.StructureToPtr(Login, ptr, false);

Int32 test = Vidyo32.VidyoClientSendEvent(Vidyo32.VidyoClientInEvent.VIDYO_CLIENT_IN_EVENT_LOGIN, ptr, size);

Login = (Vidyo32.VidyoClientInEventLogin)Marshal.PtrToStructure(ptr, typeof(Vidyo32.VidyoClientInEventLogin));

在此总结一句,C++结构体和C#结构体转换过程中,一定要注意内存大小一致

时间: 2024-11-01 13:34:15

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

C#指针操作Marshal实例

static void Main(string[] args) { byte[] a = new byte[]{0,0,0,0}; byte[] b = new byte[] {1,2,3,4}; IntPtr pt = Marshal.AllocHGlobal(a.Length); //从source数组的startIndex下标开始复制length个对象到ptr; Marshal.Copy(b,0,pt+0,b.Length); //从ptr复制length个对象到目标数组的,从目标数组的s

Marshal UTF8 Strings in .NET

原文: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

如何 在 .net 下使用 zint 生成条形码

1.首先你需要编译好的 zint 条码库.什么,你没有?那没关系,请参看:在 win32 下编译 zint 条码库. 2.启动 VISUAL STUDIO,新建一 "Windows Forms Application",将 zint.dll.zlib1.dll 和 libpng15.dll 添加到项目中,属性窗口中设置"Copy to Output Directory"为"Copy always". 3.打开"Form1.cs"

dada

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; using System.Runtime.InteropServices

P Invoke struct结构

一.获取Struct CHCNetSDK.NET_DVR_PTZPOS pos = new CameraTest.CHCNetSDK.NET_DVR_PTZPOS(); int size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_PTZPOS)); IntPtr ptr = Marshal.AllocHGlobal(size);// 申请内存 uint bytesReturnd = 0; try { if (!CHCNetSDK.NET_DVR_GetD

图片反转

图片反转: if (_srcBitmap != null) //_srcBitmap = (Bitmap)Image.FromFile(_curFileName) { _dstBitmap = (Bitmap)_srcBitmap.Clone(); BitmapData bmpData = _srcBitmap.LockBits(new Rectangle(0, 0, _srcBitmap.Width, _srcBitmap.Height),ImageLockMode.ReadWrite, _s

c#调用dll接口传递utf-8字串方法

1. 起源: VCU10之视频下载模块,采用纯python实现,c++代码调用pythonrun.h配置python运行环境启动python模块,以使界面UI能够使用其中功能. 棘手问题!用去一天时间反复打印日志,验证所传字串区别,以期望发现问题定位问题,直至下班前始有灵感. 验证发现,非中文字符可以正常下载,中文字符下载解析失败,当时即想到可能是字串不统一所致,就在python代码中做字串转换处理,均不奏效. 原接口封装代码如下: [DllImport("VideoDownloader&quo

c# 读取IntPtr 中的数据

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 + sizeo

C# 对象、文件与二进制串(byte数组)之间的转换

1.关于本文 在使用C#下的TCP(类TcpClient).UDP(类UdpClient)协议传输信息时,都需要将信息转换为byte类型的数组进行发送.本文实现了两种object与byte数组的转换和一种文件与byte数组转换的方式.基础类型的数据,可以用BitConverter类中的函数进行转换. 2.object与byte[]的相互转换:使用IFormatter的Serialize和Deserialize进行序列化与反序列化 实现这个功能,需要先引用三个命名空间:System.IO.Syst