BCB高手请进!
#ifndef _player_h_
#define _player_h_
/*----------------------------------------------------------------------
| includes
+---------------------------------------------------------------------*/
#include "xaudio.h"
#include "control.h"
#include "decoder.h"
/*----------------------------------------------------------------------
| constants
+---------------------------------------------------------------------*/
#define xa_player_mode_output_auto_close_on_stop 0x0001
...
/*----------------------------------------------------------------------
| types
+---------------------------------------------------------------------*/
typedef struct {
const char *name;
const void *data;
unsigned long size;
} xa_playerargument;
...
/*----------------------------------------------------------------------
| prototypes
+---------------------------------------------------------------------*/
#ifdef __cplusplus
extern "c" {
#endif
extern int xa_export player_new(xa_control **control,
const xa_controlarguments *control_args);
extern int xa_export player_new_ext(xa_control **control,
const xa_controlarguments *control_args,
const xa_playerarguments *player_args);
extern int xa_export player_delete(xa_control *control);
extern int xa_export player_set_priority(xa_control *control, int priority);
extern int xa_export player_get_priority(xa_control *control);
#ifdef __cplusplus
}
#define xa_cmsend control_message_send
class xa_player {
public:
xa_control *control;
xa_player() {
control = (xa_control *)0;
}
virtual ~xa_player() {
if (control) player_delete(control);
}
int setpriority(int priority) {
return player_set_priority(control, priority);
}
....
virtual int run(xa_controlarguments *control_args) {
int status;
status = player_new(&control, control_args);
if (status) control = (xa_control *)0;
return status;
}
virtual int run(xa_controlarguments *control_args, xa_playerarguments *player_args) {
int status;
status = player_new_ext(&control, control_args, player_args);
if (status) control = (xa_control *)0;
return status;
}
virtual void processmessage(xa_message *message) {
switch (message->code) {
case xa_msg_notify_ready:
onnotifyready();
break;
case xa_msg_notify_ack:
onnotifyack(message->data.ack);
break;
...
default:
break;
}
}
protected:
virtual void onnotifyready() {};
virtual void onnotifyack(int command) {};
virtual void onnotifynack(xa_nackinfo *info) {};
virtual void onnotifypong(unsigned long tag) {};
.....
};
#endif /* __cplusplus */
#endif /* _player_h_ */
上面的类该如何调用呢?
vc是这样的:
class xaudioplayer : public xa_player
{
public:
xaudioplayer(hinstance instance);
xaudioplayer(hinstance instance, xa_playerarguments *args);
virtual ~xaudioplayer();
protected:
void init();
hwnd m_hiddenwindow;
hinstance m_instance;
tchar *m_classname;
};
在bcb里应该如何呢?
参考文章:
Posted in noname. Edit