DirectShow - 将IGraphBuilder *转换为double(C ++)

时间:2017-07-17 01:28:36

标签: c++ windows winapi casting directshow

我正在使用DLL为GameMaker Studio创建扩展程序。 GameMaker Studio仅支持void,char *或double的函数返回类型。至于参数,只支持char *和double。这意味着我必须将我需要的所有其他类型转换为其中一种类型。

问题是,我不确定我是否会以最好的方式解决这个问题。尝试通过标题栏拖动DirectShow所有者窗口时,会发生非常奇怪的行为。嵌入的视频不随父窗口移动;它保持在同一个位置。

当窗口暂停或停止时,这只是一个问题。当视频当前正在播放时,DirectShow窗口将随其父窗口一起移动。但我希望用户能够暂停和停止视频,所以我需要修复此问题。这是我的DLL的代码:

(double)(DWORD)pGraph

我会提供调用DLL的GameMaker Studio代码以及所有这些,但我很怀疑我会在这里遇到GameMaker Studio用户。这是我能做的最好的事情。我不知道这是否是造成这个问题的原因,但我在思考我铸造类型的方式是为什么它表现得很时髦。要将IGraphBuilder *转换为double作为返回值,我就这样投射:

::1

我也尝试过:

127.0.0.1

两者都给我上述相同的问题。

至于论据,我是这样的:

192.168.x.x

我应该如何将IGraphBuilder *投射到双倍?或者,这甚至不是我的问题吗?

非常感谢所有建议,更正和帮助。

塞缪尔

1 个答案:

答案 0 :(得分:2)

永远不要将指针强制转换为(DWORD),如果将代码编译为64位,它将截断指针!如果必须,请使用指针大小的整数类型,如SIZE_T,UINT_PTR或DWORD_PTR。

char*是您可用的最佳类型,并且保证与其他指针类型的ABI兼容。

double是有问题的,因为它的大小可能与指针的大小不匹配,而是在64位Windows程序中的不同CPU寄存器中传递。