Приветсвую всех!
как подсказали создать dll, так и делаю:
File > New > Other..." и там "DLL Wizard"
получилось так:
tcpdll.h
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.
//---------------------------------------------------------------------------
#ifndef tcpH
#define tcpH
//---------------------------------------------------------------------------
typedef struct{
unsigned short srcport;
unsigned short destport;
unsigned int seq;
unsigned int acn;
unsigned char data_off;
unsigned char cbits;
unsigned short win;
unsigned short cksum;
unsigned short upointer;
} TCP_HDR, *LPTCP_HDR;
typedef struct{
unsigned int destaddr;
unsigned int srcaddr;
char zero;
char ptcl;
unsigned short tcplen;
} TCP_PS, *LPTCP_PS;
#define TCP_URG 0
#define TCP_ACK 2
#define TCP_PSH 4
#define TCP_RST 8
#define TCP_SYN 16
#define TCP_FYN 32
#define MIP_TOS 2
#define MIP_ID 4
#define MIP_TTL 8
#define MIP_PTCL 16
#define MIP_SRC 32
#define MIP_DEST 64
#define MTCP_SRC 2
#define MTCP_DEST 4
#define MTCP_SEQ 8
#define MTCP_ACN 16
#define MTCP_CBITS 32
#define MTCP_WIN 64
#define MTCP_UPTR 128
unsigned short makecksum(char *buf,
int len);
extern "C" unsigned short __export maketcps(LPTCP_HDR tcph,
char flags,
u_long srcaddr,
u_long destaddr,
char* data,
u_int datalen);
#endif
а tcpdll.cpp:
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.
//---------------------------------------------------------------------------
#include <windows.h>
#include <winsock.h>
#include "tcpdll.h"
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1 ;
}
//---------------------------------------------------------------------------
unsigned short makecksum(char *buf, int len){
int cksum= 0 ;
unsigned short *p = (unsigned short*) buf;
while (len> 1 ){
cksum+=(*p++);
len-= 2 ;
}
if(len== 1 ) cksum+=(*(char*)p);
cksum = (cksum>> 16 )+(cksum&0xFFFF);
cksum+=(cksum>> 16 );
return (unsigned short) (~cksum);
}
extern "C" unsigned short __export maketcps(LPTCP_HDR tcph,
char flags,
u_long srcaddr,
u_long destaddr,
char* data,
u_int datalen)
{
char* tcppac = (char*) malloc(sizeof(TCP_PS)+sizeof(TCP_HDR)+datalen);
LPTCP_PS tcpps = (LPTCP_PS) tcppac;
LPTCP_HDR tcphdr = (LPTCP_HDR) (tcppac+sizeof(TCP_PS));
tcphdr->srcport = tcph->srcport;
tcphdr->destport = tcph->destport;
tcphdr->seq = tcph->seq;
tcphdr->acn = tcph->acn;
tcphdr->data_off = tcph->data_off;
tcphdr->cbits = tcph->cbits;
tcphdr->win = tcph->win;
tcphdr->cksum = 0 ;
tcphdr->upointer = tcph->upointer;
tcpps->destaddr = destaddr;
tcpps->srcaddr = srcaddr;
tcpps->zero = 0 ;
tcpps->ptcl = 0x06; //TCP
tcpps->tcplen = sizeof(TCP_HDR)+datalen; //??? htons ???
memcpy(tcppac+sizeof(TCP_PS)+sizeof(TCP_HDR),data,datalen);
free(tcppac);
return makecksum(tcppac,sizeof(TCP_PS)+sizeof(TCP_HDR)+datalen);
}
но он мне компилит только OBJ, может я чего-то недоделал?
Заранее благодарен за ответ.
--
С уважением Алексей