Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FreemudAPI
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
FreemudAPI
Commits
e6642d71
Commit
e6642d71
authored
Nov 23, 2017
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 导出函数声明使用__stdcall修饰。 2. 接收函数兼容接收不带消息头的数据。
parent
720cf5c9
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
29 additions
and
26 deletions
+29
-26
FreemudAPI/FreemudAPI.aps
+0
-0
FreemudAPI/FreemudAPI.cpp
+1
-1
FreemudAPI/FreemudAPI.rc
+0
-0
FreemudAPI/recv.h
+21
-16
FreemudAPI/stdafx.h
+1
-4
test/test.cpp
+6
-5
No files found.
FreemudAPI/FreemudAPI.aps
View file @
e6642d71
No preview for this file type
FreemudAPI/FreemudAPI.cpp
View file @
e6642d71
...
...
@@ -23,7 +23,7 @@
isOk = false;
extern
"C"
{
__declspec
(
dllexport
)
int
FMGetResponse
(
const
char
*
req
,
char
*
rsp
,
unsigned
int
byteSize
)
__declspec
(
dllexport
)
int
__stdcall
FMGetResponse
(
const
char
*
req
,
char
*
rsp
,
unsigned
int
byteSize
)
{
WSADATA
wsa
;
SOCKET
_socket
;
...
...
FreemudAPI/FreemudAPI.rc
View file @
e6642d71
No preview for this file type
FreemudAPI/recv.h
View file @
e6642d71
...
...
@@ -43,28 +43,37 @@ int Recv(SOCKET socket, char *ptr, unsigned int byteSize)
memcpy
(
recvBuf
+
totalLen
,
tempBuf
,
tempLen
);
// 临时数据拷贝到接收数据
totalLen
+=
tempLen
;
//! 如果需要接受消息头
#ifdef NeedSocketHeaderRecv
if
(
needLen
==
-
1
&&
totalLen
>=
sizeof
(
FMSOCKHEADER
))
{
//
如果
消息头接收完成
if
(
needLen
==
-
1
&&
totalLen
>=
sizeof
(
FMSOCKHEADER
))
{
// 消息头接收完成
FMSOCKHEADER
header
=
{
0
,
0
,
0
};
memcpy
(
&
header
,
recvBuf
,
sizeof
(
FMSOCKHEADER
));
if
(
header
.
flag
!=
FMHEADERFLAG
)
{
//! 如果兼容接收没有消息头或消息头不对的数据,则不终止程序
#ifdef NoHeaderCompatible
needLen
=
totalLen
;
dataLen
=
totalLen
;
#else // NoHeaderCompatible
delete
[]
recvBuf
;
delete
[]
tempBuf
;
return
FMError_IncorrectHeader
.
Code
();
// 消息头不符
#endif // NoHeaderCompatible
}
else
{
needLen
=
header
.
len
+
sizeof
(
FMSOCKHEADER
);
// 设置实际需要接收长度
dataLen
=
header
.
len
;
}
if
(
byteSize
<
dataLen
)
{
// 判断接收Buffer长度是否足够
Log
(
"Error. Buffer overflow, Except size: %d, Actual size: %d"
,
byteSize
,
dataLen
);
delete
[]
recvBuf
;
delete
[]
tempBuf
;
return
FMError_BufferOverflow
.
Code
();
}
if
(
byteSize
<
dataLen
)
{
// 判断接收Buffer长度是否足够
Log
(
"Error. Buffer overflow, Except size: %d, Actual size: %d"
,
byteSize
,
dataLen
);
delete
[]
recvBuf
;
delete
[]
tempBuf
;
return
FMError_BufferOverflow
.
Code
();
}
}
#else
#else
// NeedSocketHeaderRecv
needLen
=
totalLen
;
dataLen
=
totalLen
;
if
(
byteSize
<
dataLen
)
{
// 判断接收Buffer长度是否足够
...
...
@@ -72,14 +81,10 @@ int Recv(SOCKET socket, char *ptr, unsigned int byteSize)
delete
[]
tempBuf
;
return
FMError_BufferOverflow
.
Code
();
}
#endif
#endif
// NeedSocketHeaderRecv
}
#ifdef NeedSocketHeaderRecv
memcpy
(
ptr
,
recvBuf
+
sizeof
(
FMSOCKHEADER
),
dataLen
);
#else
memcpy
(
ptr
,
recvBuf
,
needLen
);
#endif
memcpy
(
ptr
,
recvBuf
+
needLen
-
dataLen
,
needLen
);
delete
[]
recvBuf
;
delete
[]
tempBuf
;
...
...
FreemudAPI/stdafx.h
View file @
e6642d71
...
...
@@ -28,12 +28,9 @@ const int MAX_SIZE = 4096;
const
int
sendTimeOut
=
0
.
5
*
60
*
1000
;
const
int
recvTimeOut
=
2
*
60
*
1000
;
#ifndef NeedSocketHeaderSend
#define NeedSocketHeaderSend
#endif
#ifndef NeedSocketHeaderRecv
#define NeedSocketHeaderRecv
#
endif
#
define NoHeaderCompatible // 是否兼容接收没有消息头的数据
static
const
Freemud
::
Error
FMError_Success
(
100
,
"Success."
);
static
const
Freemud
::
Error
FMError_ConnectClosed
(
0
,
"Connection closed."
);
...
...
test/test.cpp
View file @
e6642d71
...
...
@@ -5,10 +5,8 @@
#include <string>
#include <fstream>
typedef
int
(
*
FMGetResponse
)(
const
char
*
req
,
char
*
rsp
,
unsigned
int
byteSize
);
typedef
int
(
__stdcall
*
FMGetResponse
)(
const
char
*
req
,
char
*
rsp
,
unsigned
int
byteSize
);
const
unsigned
int
outSize
=
1024
*
1024
+
1
;
char
out
[
outSize
]
=
{
0
};
int
_tmain
(
int
argc
,
_TCHAR
*
argv
[])
{
HMODULE
hdll
=
LoadLibraryA
(
"FreemudAPI.dll"
);
...
...
@@ -72,10 +70,13 @@ int _tmain(int argc, _TCHAR* argv[])
infile
.
close
();
}
printf
(
"Get in data: %s
\n
"
,
inStr
.
data
());
fmFunc
(
inStr
.
data
(),
out
,
outSize
);
const
unsigned
int
outSize
=
1024
*
100
+
1
;
char
out
[
outSize
]
=
{
0
};
int
ret
=
fmFunc
(
inStr
.
c_str
(),
out
,
outSize
);
printf
(
"========================================================================
\n
"
);
printf
(
"retcode: %d"
,
ret
);
printf
(
"
\n
%s
\n
"
,
out
);
printf
(
"
\n
======================================================================
\n
"
);
}
while
(
true
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment