使用c#的directshowLib 直接播放yuv的参数设置
这个问题我上网搜了,关于直接播放yuv的基本是c++写的。我对c++一点不懂,上网找了一个c#的directshow的sdk---directshowLib.dll,这个...
这个问题我上网搜了,关于直接播放yuv的基本是c++写的。我对c++一点不懂,上网找了一个c#的directshow的sdk---directshowLib.dll ,这个文件用于播放avi是正常的。但是我如果传递yuv文件过去的话,在取得yuv文件的长度时返回的一个很大的负数,接着会提示 :指令的媒体类型无效 。网上用c#做directshow的资料很少很少,希望这里有人会知道。
展开
1个回答
2013-07-08
展开全部
那是因为C++与C#中的数据类型不对应而照成的。你可以使用C#调用C++ DLL的导出函数,在你的C#中实现即可。C++的导出函数一般在SDK中会详细说明,你对着改抄就可以了。下面给点例子:例如:C++的导出函数为:long WINAPI LoadDRV(void);你在C#中使用对应的方式声明这个函数的对应函数[DllImport("Tc08a32.dll", EntryPoint = "LoadDRV", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern Int32 LoadDRV();DllImport的语法你可以在MSDN上面找到详细的说明,这里对给出的示例做一下简单的说明括号中的第一个String参数是表明你要导入的DLL的目标路径,可以是别人C++导出函数的路径EntryPoint设置后,可以主动的搜索入口函数,可要可不要。CharSet是设置你接收时的字符类型的,这个很重要,某些时候,通过改变这个值的设置可以得到你的理想值。CallingConvention是指的一个导出标准,一般在C++的SDK中也可以看到这种导出标准,是什么,就对应的用什么。 注意使用时的类型转换,因为变量的类型不同,则使用不同的对应关系,这个网上也有很多的介绍,很简单。唯一需要注意的是一些指针类型,因为C#为安全机制没有指针一般的,C++中的 Char * 在C#中可以使用一个String来传值如果是LPSTR的话,那就需要使用一个char[]来实现,具体char[]有多长,你要根据你的SDK中的说明具体实现。实现完你需要的函数之后,你即可在你的项目中调用了。
public static extern Int32 LoadDRV();DllImport的语法你可以在MSDN上面找到详细的说明,这里对给出的示例做一下简单的说明括号中的第一个String参数是表明你要导入的DLL的目标路径,可以是别人C++导出函数的路径EntryPoint设置后,可以主动的搜索入口函数,可要可不要。CharSet是设置你接收时的字符类型的,这个很重要,某些时候,通过改变这个值的设置可以得到你的理想值。CallingConvention是指的一个导出标准,一般在C++的SDK中也可以看到这种导出标准,是什么,就对应的用什么。 注意使用时的类型转换,因为变量的类型不同,则使用不同的对应关系,这个网上也有很多的介绍,很简单。唯一需要注意的是一些指针类型,因为C#为安全机制没有指针一般的,C++中的 Char * 在C#中可以使用一个String来传值如果是LPSTR的话,那就需要使用一个char[]来实现,具体char[]有多长,你要根据你的SDK中的说明具体实现。实现完你需要的函数之后,你即可在你的项目中调用了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询