游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1936|回复: 4

释放IDirectPlay8Client对象出错,不知什么原因,请赐教。

[复制链接]

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2008-7-5 03:15:00 | 显示全部楼层 |阅读模式
一个控制台应用程序,释放IDirectPlay8Client对象出错,不知是何原因,
错误信息:Run-Time Check Failure #0 - 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.


程序如下。
需要的库文件:dxguid.lib



#include "stdafx.h"
#include <dplay8.h>
#include <dpaddr.h>
//dxguid.lib odbc32.lib odbccp32.lib

IDirectPlay8Client *g_pDP=NULL;
HRESULT WINAPI MessageHandler(PVOID pvUserContext,DWORD dwMessageId,PVOID pMsgBuffer)
{
  // Return S_OK to signify the message was handled OK
  return S_OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
        HRESULT hr;
  CoInitialize(NULL);
// Create the IDirectPlay8Peer Object
   hr = CoCreateInstance( CLSID_DirectPlay8Peer, NULL,
                                       CLSCTX_INPROC_SERVER,
                                       IID_IDirectPlay8Peer,
                                       (LPVOID*) &g_pDP);
   
// Initialize DirectPlay
   hr = g_pDP->Initialize(NULL, MessageHandler, 0);



   DPN_SERVICE_PROVIDER_INFO*  pdnSPInfo       = NULL;
    DPN_SERVICE_PROVIDER_INFO*  pdnSPInfoEnum   = NULL;
    DWORD                       dwItems         = 0;
    DWORD                       dwSize          = 0;
    DWORD                       i;

    // Determine the required buffer size
    hr = g_pDP->EnumServiceProviders(NULL, NULL, NULL, &dwSize, &dwItems, 0);

     pdnSPInfo = (DPN_SERVICE_PROVIDER_INFO*) new BYTE[dwSize];
   
    //Fill the buffer with service provider information
    hr = g_pDP->EnumServiceProviders(NULL, NULL, pdnSPInfo, &dwSize, &dwItems, 0);

    // Print the provider descriptions
    pdnSPInfoEnum = pdnSPInfo;
    for (i = 0; i < dwItems; i++)
    {
        printf("Found Service Provider:  %S\n", pdnSPInfoEnum->pwszName);
        pdnSPInfoEnum++;
    }

// Release client component这里出错   
  if(g_pDP != NULL) {
    g_pDP->Close(0);
    g_pDP->Release();
  }
  g_pDP = NULL;

          CoUninitialize();


        return 0;
}

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
 楼主| 发表于 2008-7-7 17:24:00 | 显示全部楼层

Re:释放IDirectPlay8Client对象出错,不知什么原因,请赐教。

为什么会出现Run-Time Check Failure #0错误啊,诚心请教。
msdn的索引中输入directplay,大部分代码来自directplay教程1:Creating a DirectPlay Object and Enumerating Service Providers

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-8-4 16:20:00 | 显示全部楼层

Re:释放IDirectPlay8Client对象出错,不知什么原因,请赐教。

IDirectPlay8Client *g_pDP=NULL;
你这句写错了吧,应该是

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-8-4 16:21:00 | 显示全部楼层

Re:释放IDirectPlay8Client对象出错,不知什么原因,请赐教。

IDirectPlay8Peer *g_pDP=NULL;

22

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
 楼主| 发表于 2008-10-12 15:49:00 | 显示全部楼层

Re:释放IDirectPlay8Client对象出错,不知什么原因,请赐教。

多谢赐教。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 03:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表