使用marshal.PtrToStructure所出现的问题

问题描述

AVCodecContextavcodec_context=newAVCodecContext();pHandle.c=Marshal.AllocHGlobal(Marshal.SizeOf(avcodec_context));pHandle.c=avcodec_alloc_context3(refpHandle.codec);avcodec_context=(AVCodecContext)Marshal.PtrToStructure(pHandle.c,typeof(AVCodecContext));代码如上,当运行到最后一句时,说传递给运行时且要转换为委托的函数指针无效,这是怎么回事啊,求大神解答!!!!

解决方案

解决方案二:
引用楼主pianquanx43232的回复:

传递给运行时且要转换为委托的函数指针无效

你确定是最后一句?
解决方案三:
引用1楼shingoscar的回复:

Quote: 引用楼主pianquanx43232的回复:
传递给运行时且要转换为委托的函数指针无效

你确定是最后一句?

就是最后一句啊,我打算把那个phandle.c里面的内容拷贝到avcodec_context这个结构体里去,就是怎么都不行
解决方案四:
PtrToStructure和什么委托啊、函数指针啊根本就没关系如果是GetDelegateForFunctionPointer还说的过去能截张异常时候的图吗?
解决方案五:
那我怎么样才能把intptr里面的内容拷贝到结构体里去呢
解决方案六:
引用3楼shingoscar的回复:

PtrToStructure和什么委托啊、函数指针啊根本就没关系如果是GetDelegateForFunctionPointer还说的过去能截张异常时候的图吗?

那我怎么样才能把intptr里面的内容拷贝到结构体里去呢
解决方案七:
首先3014行是多余的目测你的错误应该发生在3015,引起了内存错乱,我估计这个函数调用的时候不应该有ref
解决方案八:
引用6楼shingoscar的回复:

首先3014行是多余的目测你的错误应该发生在3015,引起了内存错乱,我估计这个函数调用的时候不应该有ref

3015的内容是调用c++的dll,如果不加ref的话它也会报一样的错误
解决方案九:
弱弱的问一句结构体struct是可以用new的吗?。。你确定哪里是结构体?。。。
解决方案十:
引用8楼crystal_lz的回复:

弱弱的问一句结构体struct是可以用new的吗?。。你确定哪里是结构体?。。。

好吧我说错了结构是不能赋值为null的搞混了。。。百分之80的可能性在3015上
解决方案十一:
引用9楼crystal_lz的回复:

Quote: 引用8楼crystal_lz的回复:
弱弱的问一句结构体struct是可以用new的吗?。。你确定哪里是结构体?。。。

好吧我说错了结构是不能赋值为null的搞混了。。。百分之80的可能性在3015上

你从pHandle.c用Marshal.Copy拷贝一些数据到Byte[]里面去试试看看能否拷贝成功如果成功你看看那些byte[]的数据是不是符合你结构体的数据?。。。。
解决方案十二:
引用10楼crystal_lz的回复:

Quote: 引用9楼crystal_lz的回复:
Quote: 引用8楼crystal_lz的回复:
弱弱的问一句结构体struct是可以用new的吗?。。你确定哪里是结构体?。。。

好吧我说错了结构是不能赋值为null的搞混了。。。百分之80的可能性在3015上

你从pHandle.c用Marshal.Copy拷贝一些数据到Byte[]里面去试试看看能否拷贝成功如果成功你看看那些byte[]的数据是不是符合你结构体的数据?。。。。

刚才又运行一遍出现了这个,有认识的吗
解决方案十三:
为毛不用MMPEG的C#版本的。。。或用AForge的MMPEG..
解决方案十四:
引用12楼wyd1520的回复:

为毛不用MMPEG的C#版本的。。。或用AForge的MMPEG..

有那个版本的吗,能不能给个链接啊
解决方案十五:
http://www.aforgenet.com/aforge/framework/这个呀这个是很稳定的。
解决方案:
楼主解决了么....我也是啊,有时候能正常读取有时候说指针无效,好懵逼

时间: 2024-09-20 07:58:18

使用marshal.PtrToStructure所出现的问题的相关文章

在键盘钩子中对lParam进行Marshal.PtrToStructure类型转换时发生“内存保护”错误。

问题描述 键盘信息类:[StructLayout(LayoutKind.Sequential)]publicstructKeyBoardHookStruct{publicintvkCode;publicintscanCode;publicintflags;publicinttime;publicintdwExtraInfo;}在键盘钩子函数privateintKeyboardHookProc(intnCode,Int32wParam,IntPtrlParam)中进行KeyBoardHookStr

[c#]求Marshal.PtrToStructure(IntPtr, Object)的使用例子,要实测过的

问题描述 [c#]求Marshal.PtrToStructure(IntPtr,Object)的使用例子,要实测过的.注意每二个参数是object,不是Type 解决方案 解决方案二:自顶一下,求大神解决方案三:自顶一下,求大神解决方案四:自顶一下,求大神解决方案五:就这样用啊SomeClassobj=newSomeClass();Marshal.PtrToStructure(ptr,obj); 解决方案六:引用4楼shingoscar的回复: 就这样用啊SomeClassobj=newSome

[.NET2.0]Marshal类的使用

终于从北京回上海了,第一次听unity开发者大会,感觉讲的都是一些Unity 5新功能的介绍,其实主要还是要靠自己去摸索那些新的功能,主要就是添加了新的GUI系统,貌似集成了NGUI到Unity中,取名UGUI,还有就是集成了新的声音系统和新的动画系统,我感觉新的声音系统还是比较强大的,期待unity5的问世.大会上介绍了一些常用的插件以及Test Tools的使用,总体而言都是一些展望未来性质多点哈.希望Unity越来越强大! 废话不多说,接下来介绍一下客户端服务器通讯常用的一种方法--Mar

关于C#中枚举打印机

打印  引言前段时间为客户开发一套打印机配套的软件,对C#中调用打印机做了些研究. --------------------------------------------- 问题.Net Framework 1.1给我们提供了一个PrinterSettings类,以提供指定有关文档打印方式的信息,其中包括打印文档的打印机.其中的静态属性InstalledPrinters可以使我们获取安装在计算机上所有打印机的名称.但是可惜的是,该属性仅仅能够提供已安装的打印机的名称.对于获取该打印机的相关信息

C#捕捉摄相头的数据流

数据    没什么好说的了,我把代码都贴出来,大家自己看吧!webcam类的代码:  using System;using System.Runtime.InteropServices;namespace webcam{    /**////     /// avicap 的摘要说明.    ///     public class showVideo    {        // showVideo calls        [DllImport("avicap32.dll")] p

HOW TO: Set a Windows Hook in Visual C# .NET

HOW TO: Set a Windows Hook in Visual C# .NETThe information in this article applies to:Microsoft .NET Framework SDKMicrosoft Visual C# .NET (2002) IN THIS TASKSUMMARYSet a Mouse HookGlobal Hook Is Not Supported in .NET FrameworkREFERENCESSUMMARYThis

c#调用API显示内部局域网内的主机

显示   //写这个程序,为了是显示局域网内的主机,然后通过用户点击选中的机器,检查是否该主机上安装有SQLSERVER,是为一个配置程序所写的//这里提供CODE,给有需要的朋友 //设置DLL必须使用该命名空间using System.Runtime.InteropServices;   #region 动态链接库定义  [DllImport("mpr.dll",CharSet=CharSet.Auto)] private static extern int WNetEnumRes

C#查询DNS的MX地址的代码

//C#查询DNS的MX地址的代码namespace PAB.DnsUtils { using System; using System.Collections; using System.ComponentModel; using System.Runtime.InteropServices;  public class DnsMx {  public DnsMx()  {  }    [DllImport("dnsapi", EntryPoint="DnsQuery_W&

C#中使用网络函数 (第一部分 用户函数)[翻译]

函数|网络 本文将着重介绍Win32 API库中涉及网络管理的函数.首先我要讲一讲在.Net框架中管理用户的两个方法,第一种是Active Directory方法,这种方法要求你安装Active Directory.如果你打算管理一个小网络上的用户,或者一个未安装Active Directory的独立工作站,为了管理用户而安装Active Directory显得有些不值得.另外一种方法则是这篇文章所要讲到的--使用Win32 API库函数.在这篇文章中,我将介绍如何使用C# 添加.删除和修改用户