FFvcl(FFmpeg for delphi vcl)在cb中使用的问题

hyz_cs 2014-02-26 10:18:55
控件头文件FFPlayer.hpp中有以下红色部分

typedef void __fastcall (__closure *TVideoHookEvent)(System::TObject* Sender, Graphics::TBitmap* ABitmap, const __int64 APTS, bool &AUpdate);


但是双击控件事件自动创建的函数中是没有的,如下

void __fastcall TForm1::fplyr1VideoHook(TObject *Sender, TBitmap *ABitmap, const __int64 APTS,
bool &AUpdate)

现在编译会出现如下错误

[BCC32 Error] Unit1.h(29): E2015 Ambiguity between 'TBitmap' and 'Windows::TBitmap'
Full parser context
Unit1.cpp(6): #include Unit1.h
Unit1.h(17): class TForm1

-------------------------------------------------------

如果手动在Unit1.h和Unit1.cpp中添加"Graphics::"编译是没问题,不过控件的onVideoHook事件自动被清空掉,可能是类型不对关联不上了吧,这个要怎么解决?

...全文
836 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyz_cs 2014-03-11
  • 打赏
  • 举报
回复
引用 16 楼 ccrun 的回复:
看。
妖哥,,
hyz_cs 2014-03-04
  • 打赏
  • 举报
回复
引用 16 楼 ccrun 的回复:
你搞一个最简单的演示工程,去除掉临时文件,和FFvcl一起打包,发给我:cbfans at 163 d0t com,我帮你看看。
对了,妖哥试的话用cb2010来试吧
ccrun.com 2014-03-03
  • 打赏
  • 举报
回复
你搞一个最简单的演示工程,去除掉临时文件,和FFvcl一起打包,发给我:cbfans at 163 d0t com,我帮你看看。
hyz_cs 2014-03-03
  • 打赏
  • 举报
回复
引用 16 楼 ccrun 的回复:
你搞一个最简单的演示工程,去除掉临时文件,和FFvcl一起打包,发给我:cbfans at 163 d0t com,我帮你看看。
已发,妖哥帮忙看看,谢谢!
hyz_cs 2014-03-01
  • 打赏
  • 举报
回复
引用 1 楼 ccrun 的回复:
设计期关联不上没有关系,用代码给挂钩就行了。
fplyr1->OmVideoHook = (TVideoHookEvent)&fplyr1VideoHook;
在增加一个新的控件(Ffencode)后,自动添加了一个Ffencode.hpp后又出现错误了. 赋值这一行提示一个错误.
fplyr1->OnVideoHook = (TVideoHookEvent)&fplyr1VideoHook ;

[BCC32 Error] Unit1.cpp(19): E2015 Ambiguity between 'TVideoHookEvent' and 'Ffmpeg::TVideoHookEvent'
  Full parser context
    Unit1.cpp(17): parsing:  _fastcall TForm1::TForm1(TComponent *)
改成这样后也不行
fplyr1->OnVideoHook = (Ffmpeg::TVideoHookEvent)&fplyr1VideoHook ;

[BCC32 Error] Unit1.cpp(19): E2034 Cannot convert 'TVideoHookEvent' to 'TVideoHookEvent'
  Full parser context
    Unit1.cpp(17): parsing:  _fastcall TForm1::TForm1(TComponent *)
ccrun.com 2014-03-01
  • 打赏
  • 举报
回复
还是老办法,代码中挂钩。将函数中ASample参数的类型定义成 Byte * 就行了,如:
void __fastcall fplyr1AudioHook(TObject *Sender, const __int64 APTS, Byte *ASample,
      int ASize, int ASampleRate, int AChannels);
hyz_cs 2014-02-28
  • 打赏
  • 举报
回复
引用 4 楼 ccrun 的回复:
[quote=引用 2 楼 hyz_cs 的回复:] 有办法改吗,因为是有源码的,不过是delphi的.
不需要改头文件什么的,仅仅就是把fplyr1的OnVideoHoo事件处理函数自己声明和定义一下,然后手动挂钩就行了。 另外,我在1楼的回复中有个字母写错了。OmVideoHook 应该是 OnVideoHook[/quote] 又有个函数出现这个错误,妖哥,这种问题有办法根治吗?
	void __fastcall fplyr1AudioHook(TObject *Sender, const __int64 APTS, ::PByte ASample,
		  int ASize, int ASampleRate, int AChannels);
[BCC32 Error] Unit1.h(44): E2015 Ambiguity between 'PByte' and 'System::PByte' Full parser context Unit1.cpp(6): #include Unit1.h Unit1.h(20): class TForm1
hyz_cs 2014-02-26
  • 打赏
  • 举报
回复
引用 11 楼 sololie 的回复:
个人用吗,还是忽然公司买的? 就标准版也¥2560,不算便宜了,能买一个标准版vs2005了。 主要看能不能保证持久稳定的技术支持售后服务,不然相比用DX SDK做也不费多少功夫
个人用,也算公司吧,自己单干一年多了.
sololie 2014-02-26
  • 打赏
  • 举报
回复
个人用吗,还是忽然公司买的? 就标准版也¥2560,不算便宜了,能买一个标准版vs2005了。 主要看能不能保证持久稳定的技术支持售后服务,不然相比用DX SDK做也不费多少功夫
hyz_cs 2014-02-26
  • 打赏
  • 举报
回复
引用 9 楼 sololie 的回复:
多少钱
Delphi FFVCL 标准版 编码转换 + 播放 源码版 2560元 (cb用户稍微打了点折)
sololie 2014-02-26
  • 打赏
  • 举报
回复
多少钱
hyz_cs 2014-02-26
  • 打赏
  • 举报
回复
引用 6 楼 sololie 的回复:
怎么会容易出错呢,出错就编译不过了,没啥隐患。只不过多谢几行代码而已嘛。
我是说几个赋值容易弄混了.我用的是源码版授权的,昨天刚买滴.前段时间也支持了一个快驴OEM的正版,支持国产,哈哈.
sololie 2014-02-26
  • 打赏
  • 举报
回复
想找个FFvcl下载,发现都是要钱的,LZ用的也是授权版么,如果是破解版给俺一个吧,没搜到
sololie 2014-02-26
  • 打赏
  • 举报
回复
怎么会容易出错呢,出错就编译不过了,没啥隐患。只不过多谢几行代码而已嘛。
hyz_cs 2014-02-26
  • 打赏
  • 举报
回复
引用 4 楼 ccrun 的回复:
[quote=引用 2 楼 hyz_cs 的回复:] 有办法改吗,因为是有源码的,不过是delphi的.
不需要改头文件什么的,仅仅就是把fplyr1的OnVideoHoo事件处理函数自己声明和定义一下,然后手动挂钩就行了。 另外,我在1楼的回复中有个字母写错了。OmVideoHook 应该是 OnVideoHook[/quote] 我知道,试过了,可以用,我是说他自动创建的函数有没有什么办法改,能改的话一次性把它改完整,以后用的时候也方便,因为一次可能要用好几个播放控件,每个都手动去关联容易出错,查看代码也不能自动跳转到相应函数.
ccrun.com 2014-02-26
  • 打赏
  • 举报
回复
引用 2 楼 hyz_cs 的回复:
有办法改吗,因为是有源码的,不过是delphi的.
不需要改头文件什么的,仅仅就是把fplyr1的OnVideoHoo事件处理函数自己声明和定义一下,然后手动挂钩就行了。 另外,我在1楼的回复中有个字母写错了。OmVideoHook 应该是 OnVideoHook
hyz_cs 2014-02-26
  • 打赏
  • 举报
回复
另个作者说cb XE4中试是没问题的,但是我用的是cb 2010
hyz_cs 2014-02-26
  • 打赏
  • 举报
回复
引用 1 楼 ccrun 的回复:
设计期关联不上没有关系,用代码给挂钩就行了。 Hook函数的声明和定义,还是使用Graphics::TBitmap,如:
void __fastcall TForm1::fplyr1VideoHook(TObject *Sender, Graphics::TBitmap *ABitmap, const __int64 APTS, bool &AUpdate)
{
...
}
然后在Form1的构造函数中:
fplyr1->OmVideoHook = (TVideoHookEvent)&fplyr1VideoHook;
有办法改吗,因为是有源码的,不过是delphi的.
ccrun.com 2014-02-26
  • 打赏
  • 举报
回复
设计期关联不上没有关系,用代码给挂钩就行了。 Hook函数的声明和定义,还是使用Graphics::TBitmap,如:
void __fastcall TForm1::fplyr1VideoHook(TObject *Sender, Graphics::TBitmap *ABitmap, const __int64 APTS, bool &AUpdate)
{
...
}
然后在Form1的构造函数中:
fplyr1->OmVideoHook = (TVideoHookEvent)&fplyr1VideoHook;
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在计算机科学领域,编译原理是研究如何将编程语言转化为机器可执行代码的理论基础。其,三地址代码(Three-Address Code,TAC)作为一种间表示形式,在编译器设计经常被使用,尤其是在生成目标代码的阶段。本文将深入探讨三地址代码的概念、生成器的工作原理及其在编译过程的作用。 三地址代码是一种简单的低级抽象语法树(AST)表示,每条指令涉及三个操作数,通常包括两个源操作数和一个目的操作数。这种格式简化了代码优化和目标代码生成的复杂性。例如,一个简单的算术表达式“x = y + z”在三地址代码可能表示为: 在这个例子,“t1”是一个临时变量,存储了“y + z”的结果,然后这个结果被赋值给“x”。 生成三地址代码的过程通常发生在编译器的间阶段,即语法分析之后,语义分析之前。这个阶段称为“代码生成”或“间代码生成”。编译器通过词法分析器处理源代码,将其转化为标记流;接着,语法分析器根据上下文无关文法将标记流解析成抽象语法树。三地址代码生成器就是在这个阶段介入,它遍历AST,为每个节点生成对应的三地址指令。 在Turbo C3.0这样的编译器环境下,开发者可以实现自己的三地址代码生成器。虽然Turbo C3.0是一款较老的编译器,但其C语言编译器设计原理依然适用于现代编译器开发。开发过程,我们需要考虑如下关键点: 符号表管理:符号表记录了程序所有标识符的类型、作用域和关联地址,对于生成三地址代码至关重要,因为它提供了关于操作数的类型信息。 数据类型转换:编译器必须处理不同数据类型的运算,确保它们在三地址代码正确表示。例如,整型与浮点型之间的转换需要特别处理。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧