Consultor Eletrônico



Kbase 18120: How to use trigonometric functions in ABL on Microsoft Windows systems
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   11/3/2009
Status: Verified

GOAL:

How to use trigonometric functions in ABL on Microsoft Windows systems

GOAL:

How to Call WIN32 API Function: Sin (Sine)

GOAL:

How to Call WIN32 API Function: Cos (Cosine)

GOAL:

How to Call WIN32 API Function: Tan (Tangent)

GOAL:

How to Call WIN32 API Function: Asin (Arcsine)

GOAL:

How to Call WIN32 API Function: Acos (Arccosine)

GOAL:

How to Call WIN32 API Function: Atan (Arctangent)

GOAL:

How to Call WIN32 API Function: Sinh (Hyperbolic Sine)

GOAL:

How to Call WIN32 API Function: Cosh (Hyperbolic Cosine)

GOAL:

How to Call WIN32 API Function: Tanh (Hyperbolic Tangent)

FACT(s) (Environment):

Progress 9.x
OpenEdge 10.0x
Windows

FIX:

The following sample code shows how to call the various trigonometric functions from the Microsoft Visual C++ runtime library (MSVCRT40.DLL) from within an ABL procedure.

These function expect an input in radians. Conversion is required if the application handles angles using a different unit of measurement (degrees or grads).

The sample code:

/* Define entry points for library routines */
PROCEDURE sin EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE cos EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE tan EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE asin EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE acos EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE atan EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE sinh EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE cosh EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.

PROCEDURE tanh EXTERNAL "MSVCRT40.DLL" CDECL:
DEFINE INPUT PARAMETER dblValue AS DOUBLE NO-UNDO.
DEFINE RETURN PARAMETER dblResult AS DOUBLE NO-UNDO.
END PROCEDURE.


/* Do the math */

/* The input parameter to these functions must be a number between -1 and 1. */
/* Using any other number will cause the function call to hang. */

DEFINE VARIABLE decResult AS DECIMAL NO-UNDO.

RUN sin (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Sine of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN cos (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Cosine of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN tan (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Tangent of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN asin (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Arcsine of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN acos (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Arccosine of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN atan (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Arctangent of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN sinh (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Hyperbolic Sine of 0.655 is " decResult VIEW-AS ALERT-BOX.

RUN cosh (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Hyperbolic Cosine of 0.65.5 is " decResult VIEW-AS ALERT-BOX.

RUN tanh (INPUT 0.655, OUTPUT decResult).
MESSAGE "The Hyperbolic Tangent of 0.655 is " decResult VIEW-AS ALERT-BOX..