【阳光飞狐__与财富同行】
标题:
飞狐交易师 (foxtrader) 连结 DLL 的方法 ----- (续)
[打印本页]
作者:
ycng
时间:
2019-8-11 16:12
标题:
飞狐交易师 (foxtrader) 连结 DLL 的方法 ----- (续)
//////////////////////////////////////////////////////////foxfunc.cpp
+ W' B `+ i8 g; c6 r+ A* l
; P- N: }- @; U3 v" ~2 l2 \' @# `
//FoxFunc.cpp : Defines the entry point for the DLL application.
9 \3 `) P, }( q2 b7 k8 f
//
, S) F2 f3 g' f. {' Z
#include
<string.h>
$ _2 N5 S$ V$ a0 T& I
#include
<stdio.h>
; M! g6 ], l+ t) [' F: g! _: i
#include
<io.h>
; R5 p% s# l# }( Y! C4 q
#include
<math.h>
* A* M% _: t! q% e, g
#include
<iostream>
5 n0 [& d: x- Z: U
#include
"stdafx.h"
& H1 d5 @+ S+ H0 f
#include
"FoxFunc.h"
% q; C ?) E3 G
usingnamespace std;
$ p" M# O0 b/ q. A1 a8 X
BOOLAPIENTRY DllMain( HANDLE hModule,
/ x- @4 q# F! z! p+ h
DWORDul_reason_for_call,
" v" u. j) J1 ^; e7 Z4 t
LPVOIDlpReserved
' O H2 C2 i6 l, W
)
, D) }( W8 N( R# D; v7 @) V' I0 S
{
/ A: \9 C4 n6 F9 N) m
switch(ul_reason_for_call)
, T2 X7 v1 K( W/ G4 C
{
8 t2 _' U g8 C5 m! w( H* I6 G
caseDLL_PROCESS_ATTACH:
9 S6 |& X9 c! e8 F% z
caseDLL_THREAD_ATTACH:
0 i8 t6 P1 O: ]7 a& ]0 _% ]
caseDLL_THREAD_DETACH:
; F! i8 B$ l. L% Y% |6 a4 F9 H
caseDLL_PROCESS_DETACH:
6 U j$ B) U# u" _7 v
break;
7 N. j: D" E5 x5 ]
}
% ] g6 m6 n& `
returnTRUE;
6 v- n+ h% d( y$ Z8 S5 j/ b
}
: P7 ~( S# {6 q. s
//
计算收盘价的均价
,
一个常数参数
,
表示计算周期
+ A: c* `- v9 z M- Z
//
调用方法
:
* s! A3 J4 e. U: q
//"FOXFUNC@MYMACLOSE"(5)
& T1 w. a k- E
/*
, Z- i% ^7 o3 ]5 H- w& {& J
//extern "C" double __cdecl ppow10(double ctemp,doublelength); - - - > wrong, extern "C" is to declare pow10coming from a .dll or .lib
' {0 t5 l( Y0 _. n, p/ B! M6 `2 c H
//extern "C" double ppow10(double ctemp,double length); - - -> both are the same
+ [& O1 ^+ n4 }# A2 P: v+ y8 H
*/
" s8 W% s+ ]2 \' k: L7 Y: t( g
extern"C" double __cdecl ppow10(double ,double );
5 D$ Y! l+ p" }8 P( E
//double ppow10(double ,double );
7 h1 n! V- v5 o' b9 d: y. i
//call pow10() by __cdecl
- V, C7 F( H" r; T% d, Q
//!!!!!!!! use "C" for Microsoft visual C++ compiler
) j! f8 ]; m/ x6 k8 K
//!!!!!!!! use "C" for Microsoft visual C++ compiler
+ X$ a5 o, a. G
//!!!!!!!! use "C" for Microsoft visual C++ compiler
/ h2 V8 O! r& C/ h7 J! a$ z
//!!!!!!!! use "C" for Microsoft visual C++ compiler
+ f1 H" }5 Z$ o8 L+ c
//!!!!!!!! use "C" for Microsoft visual C++ compiler
# P+ J5 k' p' t" J. G' X/ J" Y8 \$ I
__declspec(dllexport)int WINAPI MYMACLOSE(CALCINFO* pData)
! u, Z$ C* _# Q; n9 M, _! Y: ^; O
{
' y& L7 y( ~) }# d1 g: J1 \
if( // pData->m_pfParam1 && //
参数
1
有效
) K- {: _ r2 M0 ^8 I& R
//pData->m_nParam1Start<0 && //
参数
1
为常数
) G0 Z% o$ T2 y
//pData->m_pfParam2==NULL ) //
仅有一个参数
! ?- F! G% b2 l; \
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_pfParam4
G# t2 d5 x' |9 G4 q4 B4 P( h3 G6 _% O
//&& pData->m_pfParam5 && pData->m_pfParam6 &&pData->m_nParam1Start>=0 &&
! k# w/ o. }7 A% V4 q
//pData->m_pfParam7==NULL)
- X/ A6 D; |- n4 l: `: F
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_nParam1Start>=0 &&
* ^# v$ w5 W* v, b1 S! u
pData->m_pCalcParam[0].m_nParamStart>=0&& pData->m_pCalcParam[1].m_nParamStart>=0
$ w* a7 X" s2 h0 q5 ~/ M: @8 L$ |
&&pData->m_pCalcParam[2].m_nParamStart>=0)
9 R( c8 z7 f5 Z5 e. X
{
& p. p" ^, \, {( K4 L/ f
floatfParam = *pData->m_pfParam4; //pointer ,pData->m_pCalcParam[3].m_nParamStart >= 0
3 u* v. ?: i* e
intnPeriod = (int)fParam; //
参数
1
" V3 B, B8 q, A6 N) w- `3 N
//const float* cpParam = pData->m_pfParam2; // cpParam = pointer to
) I! }. Z1 e; W$ V
constfloat* cpParam2 =pData->m_pCalcParam[1].m_pfParam; // cpParam =pointer to
3 \. v5 i) r8 a; ~' y0 L$ T# }
constfloat* cpParam3 =pData->m_pCalcParam[2].m_pfParam; // cpParam =pointer to
$ |5 L6 c. z+ l- e: T" ^; w: F
constfloat* cpParam4 =pData->m_pCalcParam[3].m_pfParam; // cpParam =pointer to
& p9 i) b3 `5 w: ]
//const float* cpParam5 =pData->m_pCalcParam[4].m_pfParam; //cpParam = pointer to
! r6 \# P* ?6 E# q8 _6 O" g1 M# c
//in foxtraderoooq:"MYFUNC2010@MYMACLOSE"(c,c,c,6),colorffffff,linethick5;// cpParam5 =pData->m_pCalcParam[4].m_pfParam
" g, B* q* t! X( d0 ^5 \0 Z& v
//pData->m_pCalcParam[5].m_fParam); //value
' u+ M: D% z C- G
//const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
# S- L y2 i4 h+ N# O p7 ?
//const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;
1 L. }0 D4 I( o0 z6 R1 H: I) K7 R0 E
//const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;
; n5 ^) Q$ k$ J/ q4 Q! ~( D
//const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;
# @% [$ I, v; c% e3 H
//const float* pValue5 = pData->m_pCalcParam[4].m_pfParam;
& ^5 r) x- ]$ c
if(nPeriod>0)
8 [+ [; |% k$ T8 d: b5 _
{
1 y3 a& }0 d: q0 ^
floatfTotal;
6 Z" ^9 E% H' F8 \
inti, j;
/ H1 X9 c# b( E! s- M
intndata = pData->m_nNumData;
) ]4 e7 b- u' `% S
//float yy[5000][1];
1 a3 Z! S; ?3 J! z2 K9 _( a
for( i = nPeriod-1; i < pData->m_nNumData; i++)//
计算
nPeriod
周期的均线
,
数据从
nPeriod-1
开始有效
2 r% t+ K) R2 u! O' }
{
! Q I K& J4 E& {% |! _
fTotal= 0.0f;
& d/ u9 F4 d$ h$ a3 C
doublelngth=5.0;
/ P" k9 S: K& E. f7 i& o+ j5 j
doublectemp=4.0;
8 B) j8 U3 s/ E
//float yy1[5000][1];
; h3 M8 Z3 s9 w
for( j = 0; j < nPeriod; j++ ) //
累加
/ Z, S4 f7 m* ]) `) i
{
" [7 L0 ]& S' R3 u3 k9 m
fTotal= pData->m_pData
.m_fClose; // @@@@@@@ vc++ 2010 cl.exe
使
pData->m_pData[i-j].m_fClose
错误
: v; ?5 D/ V) E
}
^% Y+ N" [" _+ x6 Q# a
//pData->m_pResultBuf
= fTotal*1.03; //
平均
7 |2 r" f2 t5 o$ L2 H
fTotal= cpParam3
;
1 T* H, A( D3 ]% v: t$ a
pData->m_pResultBuf
= fTotal*1.03; //
平均
" w. c! ~9 @/ e1 v+ I0 T
//ctemp = (double) pData->m_pResultBuf
; // double & - - - >overload a float value , double * - - - > overload a pointer todouble
5 E" f0 A* O( e2 o( F
//pData->m_pResultBuf
= (float) ppow10(ctemp,lngth); // float &- - - > overload a float value
! R; ^0 Y/ I& o5 C w2 Y0 ~) L
pData->m_pResultBuf
=(float) ppow10( (double) pData->m_pResultBuf
,lngth); // float &- - - > overload a float value, (float) = overload
, v4 V9 f; g7 S5 w" g4 [
}
8 X: } j" X# G
returnnPeriod-1;
+ B4 m# D0 d- R( I. r9 f0 V. b" [* E
}
' g# C; o2 t) E" L8 X! O) E
}
! L$ C' {0 U% i0 A( C
return-1;
. u5 r- B. } ^" X# R/ U( B. I
}
; ]8 W1 u9 K4 I5 P% q
//
计算均价
,2
个参数
,
参数
1
为待求均线的数据
,
参数
2
表示计算周期
" {7 K9 u+ I+ d
//
调用方法
:
9 M4 c* C/ B* l0 A# `) a
//"FOXFUNC@MYMAVAR"(CLOSE-OPEN,5)
# l6 k' f; `! d% w$ I
__declspec(dllexport)int WINAPI MYMAVAR(CALCINFO* pData)
( _& A4 t* L) u. `2 y2 d4 ~
{
O7 F) q# A/ v) n3 ~0 k: u, Z( n
if(pData->m_pfParam1&& pData->m_pfParam2 && //
参数
1,2
有效
9 |2 k5 `& T/ \: }
pData->m_nParam1Start>=0&& //
参数
1
为序列数
/ i0 Y v, [/ G% I0 r; [
pData->m_pfParam3==NULL)//
有
2
个参数
( K$ G* X9 z( i
{
) C! p' j- K) y+ [
constfloat* pValue = pData->m_pfParam1; //
参数
1
5 r) K/ y( J+ k& y$ [+ e1 c, d9 N
intnFirst = pData->m_nParam1Start; //
有效值起始位
# Q7 v9 @4 M) I) L2 G+ ^
floatfParam = *pData->m_pfParam2; //
参数
2
" N s1 N {" y
intnPeriod = (int)fParam;
o6 @/ L; {* B+ v0 T$ B. A( m
if(nFirst >= 0 && nPeriod > 0 )
5 g9 K. O/ ?. K# y, Y) p. V- R# Q
{
% Z/ [1 T% f( E! u7 s1 {9 _& L
floatfTotal;
: z: ^/ ?1 g. }$ F- H2 d
inti, j;
* l6 V% Q8 d5 h1 m
for( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )
+ m: {. c( `! W
{
, e3 b; a; Q8 D( M7 l% N
fTotal= 0.0f;
# W/ t$ Z+ G. g& F8 r
for( j=0; j < nPeriod; j++ ) //
累加
$ ?5 D9 t( R* {
fTotal+= pValue[i-j];
& | S$ N! @# I! N
pData->m_pResultBuf
= fTotal/nPeriod;//
平均
2 y6 U0 r1 ?2 K5 O' p l" H
}
( f L6 R% }. l, d) K4 T' I$ V, E
returnnFirst+nPeriod-1;
u0 g/ ^0 F: Z8 |0 `. u
}
P( k5 L. p" G
}
7 A( J# ?% ~3 w* J
return-1;
( Z7 z; _ G, Z8 O! T
}
! a5 f+ A0 S/ Q5 ]( i- ~% C& W. B
//
计算多个序列的均值
,5
个参数
,
参数
1-4
为待求多个序列
,
参数
5
用于举例说明数值参数的用法,实际在此例中无需该参数
) p j1 f1 Q& T+ Z
/*
9 z7 E5 _9 ^. L1 Q. ^( P- Z$ F. Q
调用方法
:
Q5 ~( v* j) U+ I! r/ L
MA1:=MA(CLOSE,3);
, E: O) r' e6 a7 l. S$ k
MA2:=MA(CLOSE,6);
$ {2 R3 E) f3 D# G, V5 b w
MA3:=MA(CLOSE,12);
" g; a) U: B: t
MA4:=MA(CLOSE,24);
5 J& b0 R+ d, G" a
MYBBI:"FOXFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4);
9 _+ W! [+ s- @/ S8 F% g* h
*/
( `4 o" [ Z2 o' ]) H" y- j" A8 V
__declspec(dllexport)int WINAPI MYBBI(CALCINFO* pData)
( j* f) Z: T; N7 X T" a" O6 Q
{
$ z' t: n6 e: S
if( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
; S, u8 g: u7 ]* z) {+ W6 K( Q
pData->m_pCalcParam[1].m_nParamStart>= 0 &&
8 L! E- ^2 v6 P
pData->m_pCalcParam[2].m_nParamStart>= 0 &&
0 Q, P- U3 o; J4 Q0 T
pData->m_pCalcParam[3].m_nParamStart>= 0 ) //4
个序列都含有效数值
7 h! b" @3 Z( \. b3 r# P$ H/ Q
{
( ~; W8 s( @8 {% |; Z
//
计算返回的序列的第一个有效值位置
& B( `9 c+ J q0 j4 s" O
intnFirst = pData->m_pCalcParam[2].m_nParamStart;//
已知返回的序列的第一个有效值位置与第
4
个序列一致
& D+ @8 A6 z; m2 H7 N# }1 d3 g
//
若不知,则
# ?6 x0 r6 L7 w; x! a
/*
8 G* z% \% D1 f7 T ~
intnFirst = pData->m_pCalcParam[0].m_nParamStart;
1 M8 Y% t5 \7 \. ~
if( nFirst < pData->m_pCalcParam[1].m_nParamStart )
# ]* C# a9 ]3 U' T/ F
nFirst= pData->m_pCalcParam[1].m_nParamStart;
9 |% Q. Y# f- M" J; ]
if( nFirst < pData->m_pCalcParam[2].m_nParamStart )
* O! F' \1 s/ w+ w5 A
nFirst= pData->m_pCalcParam[2].m_nParamStart;
; Y$ U8 ?& q1 ^6 o, ?
if( nFirst < pData->m_pCalcParam[3].m_nParamStart )
! y0 m% j4 _5 E
nFirst= pData->m_pCalcParam[3].m_nParamStart;
' y+ C% v+ Y1 d5 Q
*/
+ s/ h0 U' r* R
constfloat* pValue1 = pData->m_pCalcParam[0].m_pfParam;
/ T, J! g4 c8 W- H4 _0 b, C
constfloat* pValue2 = pData->m_pCalcParam[1].m_pfParam;
- }6 ^) K ?9 _ g9 |$ H5 h
constfloat* pValue3 = pData->m_pCalcParam[2].m_pfParam;
: i3 T3 Y0 f% u$ k
constfloat* pValue4 = pData->m_pCalcParam[3].m_pfParam;
! A$ D) p8 F+ b7 }" D4 M6 N
constfloat* pValue5 = pData->m_pCalcParam[4].m_pfParam;
# C2 _' h2 |: }6 a
constfloat* pValue6 = pData->m_pCalcParam[5].m_pfParam;
. T0 r- I$ b( x3 `# \) t* q
//const float* pValue1 = pData->m_pfParam1;
7 @' b I8 T, C o
//const float* pValue2 = pData->m_pfParam2;
v1 L3 T/ e4 b* s' j/ M* k* ^$ Y
//const float* pValue3 = pData->m_pfParam3;
! t" L! P. o( }4 j- ~
//int nNum = (int)(*pData->m_pfParam4);//
实际上该例中已知
nNum=4
,在此用于说明数值参数的用法
, y# _+ U& s2 O, l- s6 K% N5 \% R
intnNum = (int)(pData->m_pCalcParam[6].m_fParam);//
实际上该例中已知
nNum=4
,在此用于说明数值参数的用法
( `$ h7 o& V9 e9 s6 G
for(int i = nFirst; i < pData->m_nNumData; i++ )
; ^ F4 `, N$ T( b0 c4 G( l
{
9 x& h8 z' v! p0 H4 m3 X* K
pData->m_pResultBuf
=
% |: n9 f5 w `& Y8 A& H# n
//(pValue1
+ pValue2
+ pValue3
)/nNum;
; y7 e; P5 s. z1 X& |8 V
(pValue1
+ pValue2
+ pValue3
+ pValue4
+pValue5
+ pValue6
)/nNum;
6 G4 J3 j6 ?1 a! m
}
! T' F/ S3 H; }# P* H# ~4 o9 s6 u
returnnFirst;
" B/ _; C9 L6 e2 D% B
}
% P% V* `0 b, P' M! }/ O
return-1;
; q+ J+ b& X* \( s* K5 B. N2 v
}
' X' H5 v, A% w3 i
2 G t- \ M+ [" U" I
; n% q4 E& i" b/ m! U$ ?
# G/ \+ i6 t6 ~' Z, q
//////////////////////////////////////////////////////////////pow10.asm
4 D' C/ }( D. r' y4 v4 h
;*******************************************************
/ H, z, J( o |+ r
;* *
2 f4 h$ R5 l& y0 r% M
;* Delphi Run
Library *
0 S) T% S. |' j& \/ \4 v. A
;* *
' c8 ]1 S5 d- z' d8 y7 p3 q) F
;* Copyright (c) 1996,98 Inprise Corporation *
. C$ u `- T# `9 b2 y
;*--------------------------------------------------------------------------
) o c3 k/ X" I+ N! z H6 f
;* To compile "tasm32 /ml pow10.asm" *
/ z! \' y. A, u/ d& y9 [7 n
;*--------------------------------------------------------------------------
1 E# W" ?1 {5 u
;*******************************************************
; s4 J3 L+ f4 m. V
.386
2 \/ F( w8 @0 e V! N, j) _# h
;.MODEL flat,c (error must be in segement block must have segment
2 N& f" |9 U4 z9 W. j3 `# |
;!!!!!11 important if ',c' is not used , must use 'public _ppow10, and'_ppow10 proc'
6 r) }/ B0 T/ O& W
;!!!!!11 important if .MODEL flat,c is not used , must use ;_TEXTSEGMENT WORD PUBLIC
& k, X5 }! ~6 ]& `, U
;'CODE'..._TEXT ENDS and must use 'public _ppow10 and '_ppow10 proc'
' j+ B( O' v" T! I
.MODELflat,c ; just use .code, no need for segment,!!!!!11 important if',c' is used , must use 'public ppow10, and 'ppow10 proc'
9 F+ ~' \9 g6 B7 S6 V# N9 _$ z
;ppow10 PROTO,aVal:PTR REAL8, bVal:PTR REAL8
; `: U! q7 Z" J. c2 p7 ]
;includeE:\Vsource\masm32\INCLUDE\windows.inc
. a, o2 e, a3 `- T1 Y
;includeE:\Vsource\masm32\INCLUDE\user32.inc
A0 Z, R& Y! p# Q0 d
;includeE:\Vsource\masm32\INCLUDE\kernel32.inc
% I# f* Z$ [% N8 K, w
PUBLICppow10
, e* f# @; l: o, M* ]* \) k% K
.CODE
7 U! J; r# C+ K% ~
;DllEntryproc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
p0 ?3 p: a6 t( s+ d$ i
;.if reason==DLL_PROCESS_ATTACH
. S) O$ v; \+ W% B. P3 ?$ o" l+ P
;invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK
1 G9 u& Y; Z' C* a
;.elseif reason==DLL_PROCESS_DETACH
6 }7 X$ b! T/ ]9 u' Z" B$ o
;invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK
% Y8 `' W( u+ M& Z$ A6 C" |$ w
;.elseif reason==DLL_THREAD_ATTACH
9 ~6 c" v4 i2 u: `) ?
;invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK
' {) R) o/ f; ~6 n9 ^. g% B
;.else ; DLL_THREAD_DETACH
- ?! B$ a3 n+ Z: n7 {9 }
;invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK
% I% U9 s% p8 t2 b$ [2 t6 |% i
;.endif
. E5 K: {9 {5 f3 d- {7 `8 j
;mov eax,TRUE
. x, v i( e' p& p9 Z- R
;ret
9 R, n2 p' ?: O) K
;DllEntryEndp
! a0 O0 p/ g6 U/ r' m7 ]% G2 |
;FUNCTION _Ppow10( double val, double pow: ) : Extended;
. e6 g7 i, `4 @6 ?# M
;_TEXTSEGMENT WORD PUBLIC 'CODE'
! j/ N- [& r1 v0 }' J7 f
;ppow10 PROC,aVal:PTR REAL8, bVal:PTR REAL8
, q+ M. {% t: X5 K: q6 F# Z5 A
;ppow10 PROC,aVal:* Qword, bVal:Qword
( D' `( k3 @% d( d+ v5 m8 e+ v
ppow10PROC near
/ H" C, h% f0 e0 p3 |' u
XUEQU 8 ; for eip & ebp
$ l2 Y" |8 Q" q
XDEQU 0 ; for edi, esi, ebx, ecx, edx
6 @$ N4 C$ w# K1 ?0 D
fp_powerEQU QWORD PTR [ebp+XU+8]
9 p( [5 N0 G4 C% Q2 v
fp_valEQU QWORD PTR [ebp+XU]
# [# r* _$ h5 l; j/ E
valEQU QWORD PTR [eBP-XD-8] ; USE STACK
& J; F v/ c1 M, X A- t
powerEQU QWORD PTR [eBP-XD-16] ; USE STACK
* F4 ~) M% t7 M
pow10EQU QWORD PTR [eBP-XD-24] ; USE STACK
* X2 E9 c" P% `! O
FPower10:
$ N- u9 P: E5 P' R
pushebp
# c V) H! T# ^/ Z3 }
movebp,esp
: B- v- R/ |, o! @- Q
;push edi
5 y; C8 E B+ s6 {/ \
;push esi
. \( Z, o: g" \, E9 G5 n* [
;push eax
& q$ g6 X; z6 K G+ f
;push edx
# c2 [2 j% \3 k( m
subesp,24
7 U/ z ~) s+ L: F/ \
FINIT
. A% B' z' B& k8 y
fldz
/ M K C& C/ V8 B
fstval
; p( Z( Y' m, u" Z$ L+ s6 y6 K! a
fstpower
" s3 V- F2 D, @
fstppow10
* ^/ f8 N$ V0 Z( f' m! N' @6 j8 q
MOV EAX,8 MOV EDX,8
; fldpi
) e) {* N# V# h; T. Y
fld fp_val ;st(0)=val
; fld aVal;st(0)=val
8 |, ]! M6 s/ g' t9 e, J: D
fstval
J6 R, x; c0 M# Y3 n
;fld Arg2 ;st(0)=power
/ o) J' X: o0 T& n9 p
;fstp power
+ `; m3 _; e5 o0 |( y
;fld val ;st(0)=val
/ f9 m, J) b5 J7 s
;fmul val ;st(0)=val*val
# H, f0 {, d' U7 v: x( w( B0 P
;fmul val ;st(0)=val*va*val
" I* g& m; O" V8 w8 w/ [% A; B* B
;fadd st,st(0)
- N+ R: F- J2 ?
;fmul qword ptr [ebp+16] ;st(0)=power
2 k+ m j$ m7 X" ^) e
;fadd st,st(0)
* z, R9 Q- C( e
;fwait
7 ~) O; @0 g( S1 M7 D& ~
addesp,24
' k( m2 e6 m( w5 h( ^6 o
;pop edx
! C. \5 d9 t3 R# \' `5 J6 ^
;pop eax
) e* I/ d: P( p3 z2 r
;pop esi
; f' I7 O9 t( t3 @) _
;pop edi
0 u' @. [; {, e1 \) o
movesp,ebp
7 ^% H7 j0 I' m# N) I3 y+ p3 @
popebp
0 x. Y; O4 a7 Y, {: T
;leave ; @@@@@@ important don't use leave in vc++ 2010
, g! |2 v2 i" ?6 C+ z& u
RET;return value = st(0)
7 I+ l( e3 l/ ^. ]
ppow10ENDP
$ s; f. I; E+ i- z
;_TEXTENDS
/ m* @) y, {9 L, ^# h! h' T
END
9 N( J( n( F/ O3 J1 o
;END DllEntry
欢迎光临 【阳光飞狐__与财富同行】 (http://bbs.88158.cn/)
Powered by Discuz! X3.2