Unbehandelte Ausnahme in send.exe (NTDLL.dll) 0xC0000005: Acces Violation
und
kann das mal jemand bei sich compilieren? ob das bei ihm geht
Ich hab das gefüh ich brauch ein neuen Kompiler
hier ist angeblich der fehler
Code:
#include "../winudp_common.h"
#include "winudp_send.h"
#define WIN32_LEAN_AND_MEAN
HWND hWindow; // Window Handle
// Netzwerk Ausgabe
struct sockaddr_in remote; // UDP Empfaenger IPv4 Adress und Port Struktur
volatile SOCKET remotefd = INVALID_SOCKET; // UDP Empfaenger Filedeskriptor
CRITICAL_SECTION remotefd_sem;
// Audio Eingabe (Empfang vom Mikrofon)
HWAVEIN hWaveIn;
WAVEHDR WaveHdrIn[AUDIOBUFS];
BYTE BufferIn[AUDIOBUFS][BUFSIZE];
DWORD WINAPI WaveInThread (void *Arg)
{
MSG Msg;
int rv;
rv = SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
winexit_if(0 == rv, hWindow, "SetThreadPriority failed");
while (GetMessage (&Msg, NULL, 0, 0) == TRUE) {
if (MM_WIM_DATA == Msg.message) {
int rv = 0;
WAVEHDR *Hdr = (WAVEHDR *) Msg.lParam;
EnterCriticalSection(&remotefd_sem);
if (remotefd != INVALID_SOCKET) {
rv = sendto(remotefd, Hdr->lpData, sizeof(BufferIn[0]), 0,
(struct sockaddr *) &remote, sizeof(remote));
if (rv < 0) {
closesocket(remotefd);
remotefd = INVALID_SOCKET;
}
}
LeaveCriticalSection(&remotefd_sem);
waveInAddBuffer(hWaveIn, Hdr, sizeof(*Hdr));
if (rv < 0) MessageBox(hWindow, "sendto failed", "WARNING", MB_OK);
}
}
return 0;
}
BOOL CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_INITDIALOG: {
WSADATA wsaData;
int rv;
int i;
WAVEFORMATEX waveform;
HANDLE WaveInThreadHandle;
DWORD WaveInThreadId;
hWindow = hWnd;
// Init Netzwerk
rv = WSAStartup(MAKEWORD(2, 2), &wsaData);
winexit_if(rv != 0, hWnd, "WSAStartup failed");
// Init Audio
waveform.nChannels = AUDIOCHANNELS;
waveform.wBitsPerSample = 8;
waveform.nAvgBytesPerSec = AUDIOSPEED * waveform.nChannels * waveform.wBitsPerSample / 8;
waveform.wFormatTag = AUDIOFORMAT;
waveform.nSamplesPerSec = AUDIOSPEED;
waveform.nBlockAlign = 1;
waveform.cbSize = 0;
WaveInThreadHandle = CreateThread(NULL, 0, WaveInThread, NULL, 0, &WaveInThreadId);
winexit_if(NULL == WaveInThreadHandle, hWnd, "CreateThread failed");
rv = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform, (DWORD)WaveInThreadId,0,CALLBACK_THREAD);
winexit_if(rv != MMSYSERR_NOERROR, hWnd, "waveInOpen failed");
for (i = 0; i < AUDIOBUFS; ++i) {
WaveHdrIn[i].lpData = BufferIn[i];
WaveHdrIn[i].dwBufferLength = sizeof(BufferIn[0]);
WaveHdrIn[i].dwBytesRecorded = 0;
WaveHdrIn[i].dwUser = 0;
WaveHdrIn[i].dwFlags = 0;
WaveHdrIn[i].dwLoops = 0;
WaveHdrIn[i].lpNext = NULL;
WaveHdrIn[i].reserved = 0;
waveInPrepareHeader(hWaveIn, WaveHdrIn + i, sizeof(WaveHdrIn[0]));
waveInAddBuffer(hWaveIn, WaveHdrIn + i, sizeof(WaveHdrIn[0]));
}
waveInStart(hWaveIn); // starte Aufnahme
break;
}
case WM_COMMAND: {
if (ID_CONNECT == wParam) {
struct hostent *he;
int rv;
char yes = '1';
char nodename[128];
SOCKET fd;
EnterCriticalSection(&remotefd_sem);
if (remotefd != INVALID_SOCKET) {
closesocket(remotefd);
remotefd = INVALID_SOCKET; // remotefd auf nicht-initialisiert setzen
}
LeaveCriticalSection(&remotefd_sem);
// Hole den Nodename aus dem Edit Dialog
rv = GetDlgItemText(hWnd, ID_NODENAME, nodename, sizeof(nodename));
he = gethostbyname(nodename); // hole UDP Empfaenger IPv4 Adresse
winreturn_if(NULL == he, hWnd, "gethostbyname failed");
fd = socket(AF_INET, SOCK_DGRAM, 0); // Socket Filedeskriptor anlegen
winreturn_if(fd < 0, hWnd, "socket failed");
// UDP Broadcast erlauben
rv = setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));
winreturn_if(rv < 0, hWnd, "setsockopt failed");
memset(&remote, 0, sizeof(remote)); // remote mit 0 fuellen
remote.sin_family = AF_INET;
remote.sin_port = htons(BABYPHONE_PORT);
remote.sin_addr = *((struct in_addr *) he->h_addr);
remotefd = fd; // Ohne EnterCritical.. - einfache Zuweisung ist atomar
}
if (IDCANCEL == wParam) {
EndDialog(hWnd, 0);
}
break;
}
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
}
Code:
#include <winsock2.h>
#include <windows.h>
#include <commctrl.h>
#include <mmsystem.h>
#include <mmreg.h>
#include <stdio.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib, "comctl32.lib")
#define BABYPHONE_PORT 26002 // Der Babyphone well known Port
#define BUFSIZE 512 // Groesse Soundcard Buffer in Samples
#define AUDIOBUFS 3 // Anzahl Soundcard Buffer, Minimum ist 2
#define AUDIOFORMAT WAVE_FORMAT_MULAW // Audio Codec G.711 u-Law
#define AUDIOSPEED 16000 // Abtastfrequenz
#define AUDIOCHANNELS 1 // 1 ist Mono, 2 ist Stereo
#define winreturn_if(expr, hWnd, str) \
if(expr) { \
MessageBox(hWnd, str, "WARNING", MB_OK); \
return 0; \
}
#define winexit_if(expr, hWnd, str) \
if(expr) { \
MessageBox(hWnd, str, "FAILURE", MB_OK); \
EndDialog(hWnd, 0); \
return 0; \
}
und
Code:
// winudp_send.rc
//
#include "windows.h"
#include "winver.h"
#include "winudp_send.h"
IDD_DIALOG1 DIALOGEX DISCARDABLE 10, 150, 200, 100
STYLE WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
CAPTION "winudp_send"
FONT 8, "Lucida Console"
BEGIN
LTEXT "Nodename:", 1000, 10, 10, 100, 15
EDITTEXT ID_NODENAME, 10, 30, 100, 15
DEFPUSHBUTTON "Connect",ID_CONNECT, 10, 50, 35, 15, BS_CENTER | BS_VCENTER
END
kann das mal jemand bei sich compilieren? ob das bei ihm geht
Ich hab das gefüh ich brauch ein neuen Kompiler
Code:
7C928FEA inc dword ptr [eax+10h]
Zuletzt bearbeitet: