请高手指点迷津.

feng 2000-07-24 04:10:00
下面程序运行到标号4的时候报错

#include "windows.h"
#include "dsound.h"

typedef HRESULT (*CreateDSound)(LPCGUID ,LPDIRECTSOUND * ,LPUNKNOWN );
HMODULE haspi = NULL;
CreateDSound DSoundCreate = NULL;

HRESULT hr;
LPDIRECTSOUND m_ps_ds;

1. if( hr = CoInitialize(NULL) )
printf("error\n");

2. haspi = LoadLibrary("dsound.dll");
if(haspi == NULL)
printf("error\n");
3. DSoundCreate = (CreateDSound)GetProcAddress(haspi, "DirectSoundCreate");

//extern HRESULT WINAPI DirectSoundCreate(LPCGUID, LPDIRECTSOUND *, LPUNKNOWN);
4. hr = DSoundCreate( NULL, &m_ps_ds, NULL );
if( FAILED( hr ) )
printf("error\n");
错误信息如下
The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one
calling convention with a function pointer declared with a different
calling convention
请高手指点迷津.
...全文
144 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng 2000-09-03
  • 打赏
  • 举报
回复
问题已自己解决。Kevin_qing说的有一些道理。
Kevin_qing 2000-08-25
  • 打赏
  • 举报
回复
是你的DirectSoundCreate的聲明有问题
,另外你为什么用程序加载dll不用自动链接?
extern HRESULT WINAPI DirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);
不能少了WINAPI,因为一种是PASCAL方式的call,一种是C方式的。
乱用会造成堆栈错误,使程序运行道不正常的地方。
还有建议在:

3. DSoundCreate = (CreateDSound)GetProcAddress(haspi, "DirectSoundCreate");


这里检查一下DSoundCreate是否为NULL;

zhq2000 2000-07-25
  • 打赏
  • 举报
回复
用这个:
LPDIRECTSOUND lpDSound=NULL;
DirectSoundCreate(lpGuid,&lpDSound,NULL);

lpGuid是通过DirectSoundEnumerate得到!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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