- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Our biggest support cost was getting the dongle to work, as operating systems changed, ditto hardware.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page