1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| #pragma unmanaged
typedef enum {
mono,
stereo
}THSound_Channel;
typedef bool (*E_HS)(void *HSound,void *param,short **u,int *sz);
typedef bool (*E_ENDHS)(void *HSound,void *param,short *u,int sz);
typedef struct {
int sizecb;
struct {
DWORD freq;
DWORD bufko;
THSound_Channel channel;
char bits;
HANDLE hLic;
HANDLE hEvent;
void *param;
E_HS devent;
E_ENDHS endev;
char nbuf;
}in;
}THSound,*PHSound;
bool endev(void *HSound, void *param, short *u, int sz)
{
delete u;
return true;
}
//la fonction devent est dans une zone managé
void msg(char* s);
#include "e:/communlib/types_wave.h"
//fonctionne
void* initwave(int sample, int bits, int channel,char *name,int &mcierror, void *paramclass)
{
msg("InitWave1");
void *ret = nullptr;
if (_HSound_Load())
{
msg("InitWave2");
msg("InitWave2x0");
THSound ts;
msg("InitWave2x1");
ts.sizecb = sizeof(ts);
msg("InitWave2x2");
ts.in.bits = bits;
ts.in.channel = channel==1? THSound_Channel::mono:THSound_Channel::stereo;
ts.in.nbuf = 4;
msg("InitWave2x3");
ts.in.param = paramclass;
msg("InitWave2x4");
ts.in.devent = devent;
ts.in.endev = endev;
msg("InitWave2x5");
ts.in.bufko = 128 * 1024;
ts.in.freq = sample;
msg("InitWave2x6");
msg("InitWave3");
ret = _HSound_Init(&ts, &mcierror, name);
msg("InitWave4");
if (ret != nullptr)
{
msg("InitWave5");
_HSound_SetAcquireBuffer(ret, true, false);
msg("InitWave6");
_HSound_Padding(ret);
msg("InitWave7");
}
msg("InitWave8");
}
}
//crash
void* initwave(int sample, int bits, int channel,char *name,int &mcierror, void *paramclass)
{
msg("InitWave1");
void *ret = nullptr;
if (_HSound_Load())
{
msg("InitWave2");
msg("InitWave2x0");
THSound ts={0};
msg("InitWave2x1");
ts.sizecb = sizeof(ts);
msg("InitWave2x2");
ts.in.bits = bits;
ts.in.channel = channel==1? THSound_Channel::mono:THSound_Channel::stereo;
ts.in.nbuf = 4;
msg("InitWave2x3");
ts.in.param = paramclass;
msg("InitWave2x4");
ts.in.devent = devent;
ts.in.endev = endev;
msg("InitWave2x5");
ts.in.bufko = 128 * 1024;
ts.in.freq = sample;
msg("InitWave2x6");
msg("InitWave3");
ret = _HSound_Init(&ts, &mcierror, name);
msg("InitWave4");
if (ret != nullptr)
{
msg("InitWave5");
_HSound_SetAcquireBuffer(ret, true, false);
msg("InitWave6");
_HSound_Padding(ret);
msg("InitWave7");
}
msg("InitWave8");
}
} |