Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

use .ocx file in fortran

rezaei
Beginner
629 Views

hi

I want to use .ocx file in Fortran 6.5 for dongle use.

I extract .ocx file by "Fortran wizard module" tools. This code is here:

----------------------------------------

MODULE dng

USE DFWINTY

USE DFAUTO

use dfcom

IMPLICIT NONE

! IIDs

TYPE (GUID), PARAMETER :: IID___MyDong = &

GUID(#D06E3A93, #8B0E, #4C4D, &

CHAR('A5'X)//CHAR('D7'X)//CHAR('6A'X)//CHAR('0F'X)// &

CHAR('4D'X)//CHAR('EF'X)//CHAR('50'X)//CHAR('EE'X))

TYPE (GUID) iid

! Module Procedures

CONTAINS

SUBROUTINE $MyDong_RD($OBJECT, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, $STATUS)

!DEC$ ATTRIBUTES DLLEXPORT :: $MyDong_RD

IMPLICIT NONE

INTEGER(INT_PTR_KIND()) :: $OBJECT ! Object Pointer

!DEC$ ATTRIBUTES VALUE :: $OBJECT

INTEGER*2, INTENT(INOUT), VOLATILE :: d0

!DEC$ ATTRIBUTES REFERENCE :: d0

INTEGER*2, INTENT(INOUT), VOLATILE :: d1

!DEC$ ATTRIBUTES REFERENCE :: d1

INTEGER*2, INTENT(INOUT), VOLATILE :: d2

!DEC$ ATTRIBUTES REFERENCE :: d2

INTEGER*2, INTENT(INOUT), VOLATILE :: d3

!DEC$ ATTRIBUTES REFERENCE :: d3

INTEGER*2, INTENT(INOUT), VOLATILE :: d4

!DEC$ ATTRIBUTES REFERENCE :: d4

INTEGER*2, INTENT(INOUT), VOLATILE :: d5

!DEC$ ATTRIBUTES REFERENCE :: d5

INTEGER*2, INTENT(INOUT), VOLATILE :: d6

!DEC$ ATTRIBUTES REFERENCE :: d6

INTEGER*2, INTENT(INOUT), VOLATILE :: d7

!DEC$ ATTRIBUTES REFERENCE :: d7

INTEGER*2, INTENT(INOUT), VOLATILE :: d8

!DEC$ ATTRIBUTES REFERENCE :: d8

INTEGER*2, INTENT(INOUT), VOLATILE :: d9

!DEC$ ATTRIBUTES REFERENCE :: d9

INTEGER*4, INTENT(OUT), OPTIONAL :: $STATUS ! Method status

!DEC$ ATTRIBUTES REFERENCE :: $STATUS

INTEGER*4 $$STATUS,clsctx

INTEGER(INT_PTR_KIND()) invokeargs

invokeargs = AUTOALLOCATEINVOKEARGS()

CALL AUTOADDARG(invokeargs, '$ARG1', d0, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG2', d1, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG3', d2, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG4', d3, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG5', d4, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG6', d5, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG7', d6, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG8', d7, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG9', d8, AUTO_ARG_INOUT)

CALL AUTOADDARG(invokeargs, '$ARG10', d9, AUTO_ARG_INOUT)

$$STATUS = AUTOINVOKE($OBJECT, 1610809344, invokeargs)

IF (PRESENT($STATUS)) $STATUS = $$STATUS

CALL AUTODEALLOCATEINVOKEARGS (invokeargs)

END SUBROUTINE $MyDong_RD

END MODULE

-----------------------------------

I use this module in format of this:

----------------------------------------

program mm

use dng

integer(2) d0, d1, d2, d3, d4, d5, d6, d7, d8, d9

integer $STATUS

integer:: $OBJECT,status1

call $MyDong_RD($OBJECT, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, $STATUS)

end program

----------------------------------------

I dont know how to set variable$OBJECT. And program has this run time error:

----------------------------------------

forrtl: severe (157): Program Exception - access violation

Image PC Routine Line Source

mydong.exe 00402250 Unknown Unknown Unknown

Incrementally linked image--PC correlation disabled.

Press any key to continue.

----------------------------------------

Please help me.

Your sincerity

Rezaei

0 Kudos
3 Replies
Roger_Farrow
Beginner
629 Views
Hi Rezaei,

you need to initialize COMbefore youcreate the object pointed at by $OBJECT. You will need the ProgID for the dongle class, which can be found inyour documentation for the ocx. After you'veregistered the ocx you can findits ProgIDusing OLEViewer or bylooking in the registry.

integer :: status
character(128) :: ProgID = 'MyDongle.IMyDongle' ! for example

call COMInitialize(status)

call COMCreateObjectByProgID(ProgID, $OBJECT, status)

Don't forget to "use ifcom" and to release COM objects and uninitialize COM when done.

Regards,
Roger
0 Kudos
bendel_boy1
Beginner
629 Views
Instead of using a dongle, look at using something like CopyMinder - an updated Internet-style token protection system, which allows the EXE to be given simple protection directly.

Our biggest support cost was getting the dongle to work, as operating systems changed, ditto hardware.
0 Kudos
rezaei
Beginner
629 Views

Hi Roger

Thank you for your perfect reply.

I have another problem with calling objects:

I use"AUTOGetProperty(idispatch,id,value) for getting value of object's properties.

When I use member Id in this, it works correctly but by usingargument's name does not.

For example:

status = AUTOGetProperty ($OBJECT, 23, A) This is ok. A=231

status = AUTOGetProperty ($OBJECT, '$Counter', A) This is not ok. A=0

Regards,

Rezaei

0 Kudos
Reply