Hallo Leute
Ich hab mal ne kleine TCP-Dll geschrieben (zum Test. Wird noch erweitert) und wollte Sie testen. Also die Dll wird definitiv ausgeführt. Das hab ich rausgefunden indem ich ne MessageBox in die Dll eingefügt habe und die wurde auch aufgerufen ^^. Die MsgBox meines AutoIt Scripts wurde aber leider nicht angezeigt :pinch:. Das Script läuft erfolgreich bis ein return in der Dll kommt. Dann läuft es noch ein wenig und hängt sich dann auf ohne MsgBox.
Hier das Script:
Spoiler anzeigen
[autoit]
$hDll = DllOpen($sPath) ; Und ja $sPath habe ich definiert ; )
$aSocket = DllCall($hDll, "int", "StartupClient", "str", @IPAddress1, "int", 50000)
MsgBox(0, "Return", @error)
DllClose($hDll)
Exit
Und die Dll:
Spoiler anzeigen
C
#pragma comment(lib, "Ws2_32.lib")
#include <WinSock2.h>
#include <Windows.h>
SOCKET idSocket[1];
char *szBuf;
int i = 0;
extern "C" int __declspec(dllexport) StartupClient (char *sIP, int iPort)
{
WSADATA wsa;
SOCKET* idSocket = new SOCKET[i++];
SOCKADDR_IN tAdr;
WSAStartup(MAKEWORD(2,0), &wsa);
idSocket[i] = socket(AF_INET, SOCK_STREAM, 0);
if(idSocket[i] == INVALID_SOCKET)
return 0 - WSAGetLastError();
memset(&tAdr, 0, sizeof(SOCKADDR_IN));
tAdr.sin_family = AF_INET;
tAdr.sin_port = htons(iPort);
tAdr.sin_addr.s_addr=inet_addr(sIP);
if(connect(idSocket[i], (SOCKADDR*) & tAdr, sizeof(SOCKADDR)) == SOCKET_ERROR)
return 0 - WSAGetLastError();
// sprintf (buffer, "%i", WSAGetLastError());
// MessageBoxA(NULL, (LPCSTR)buffer, "", 0);
return i;
}
extern "C" int __declspec(dllexport) StartupServer (int iPort)
{
WSADATA wsa;
SOCKET idSocketListen;
SOCKET* idSocket = new SOCKET[i++];
SOCKADDR_IN tAdr;
WSAStartup(MAKEWORD(2,0), &wsa);
idSocketListen = socket(AF_INET,SOCK_STREAM,0);
memset(&tAdr, 0, sizeof(SOCKADDR_IN));
tAdr.sin_family = AF_INET;
tAdr.sin_port = htons(iPort);
tAdr.sin_addr.s_addr = INADDR_ANY;
if(bind(idSocketListen, (SOCKADDR*) & tAdr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
return 0 - WSAGetLastError();
if(listen(idSocketListen, 10) == SOCKET_ERROR)
return 0 - WSAGetLastError();
idSocket[i] = accept(idSocketListen, NULL, NULL);
if(idSocket[i] == INVALID_SOCKET)
return 0 - WSAGetLastError();
return i;
}
extern "C" int __declspec(dllexport) TCPSend (int j, const char *szToSend)
{
if(send(idSocket[j], szToSend, strlen(szToSend), 0) == SOCKET_ERROR)
return 0 - WSAGetLastError();
return 1;
}
extern "C" char __declspec(dllexport) *TCPRecv (int j, const int iLen)
{
szBuf = new char[iLen];
if(recv(idSocket[j], szBuf, iLen, 0) == SOCKET_ERROR)
return 0;
return szBuf;
}
extern "C" void __declspec(dllexport) TCPShutdown (SOCKET idSocket)
{
closesocket(idSocket);
WSACleanup();
return;
}
Alles anzeigen
Hat wer ne Idee woran das liegt?
Gruss Shadowigor