我正在使用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 *投射到双倍?或者,这甚至不是我的问题吗?
非常感谢所有建议,更正和帮助。
塞缪尔
答案 0 :(得分:2)
永远不要将指针强制转换为(DWORD)
,如果将代码编译为64位,它将截断指针!如果必须,请使用指针大小的整数类型,如SIZE_T,UINT_PTR或DWORD_PTR。
char*
是您可用的最佳类型,并且保证与其他指针类型的ABI兼容。
double
是有问题的,因为它的大小可能与指针的大小不匹配,而是在64位Windows程序中的不同CPU寄存器中传递。