arbelo Posted November 5, 2005 Report Share Posted November 5, 2005 Hi, I need to communicate with a Druck DPI615 field pressure calibrator, using labview 7.1 Druck offers drivers in the FCINTF format at http://www.ge-intecal.com/support.htm and ships as a DLL. The specification of the FCINTF protocol are here: http://www.isa.org/PrinterTemplate.cfm?Tem...8007&FuseFlag=1 I'm not confident with COM objects; I've tried the following: 1) using a "Call Library function node", I've tried to connect to the functions contained in the library, but the functions I've found don't seem to be useful 2) using an ActiveX container on the front panel and linking it to the DLL: no methods or properties were available. Can someone have a very fast view at the pdf and/or the dll and tell me some directions to handle this poblem? Thank you Fabio PS: find attached the DLL and the FCINTF Specification pdf file Download File:post-3137-1131190731.zip Quote Link to comment
arbelo Posted November 6, 2005 Author Report Share Posted November 6, 2005 Some additions, hoping this will help others helping me Labview show only the following functions inside the DLL driver: DllCanUnloadNow DllGetClassObject DllRegisterServer DllUnregisterServer Using a third party tool (LibDump) I've extrapolated the atached file which contains the function prototypes contained in the DLL. This generated file is similar to the already posted .IDL file. Take as example the DriverProperties function: HRESULT _stdcall DriverProperties([out] tagFCISTATUS* pStatus); it seems that this function is inside the DL, but the Call Library Function Dialog doesn't show this function in the scroll down menu. Anyway, if I write the name "DriverProperties" in the "Function Name" field, LabView automatically generates the correct function prototype as follows: long DriverProperties(VARIANT *pStatus); meaning that LabView is somehow able to identify the function inside the DLL. BUT, the "Run Arrow" remains broken with the Function Not Found error. HEEEELLPPPPP! Fabio Hi,I need to communicate with a Druck DPI615 field pressure calibrator, using labview 7.1 Druck offers drivers in the FCINTF format at http://www.ge-intecal.com/support.htm and ships as a DLL. The specification of the FCINTF protocol are here: http://www.isa.org/PrinterTemplate.cfm?Tem...8007&FuseFlag=1 I'm not confident with COM objects; I've tried the following: 1) using a "Call Library function node", I've tried to connect to the functions contained in the library, but the functions I've found don't seem to be useful 2) using an ActiveX container on the front panel and linking it to the DLL: no methods or properties were available. Can someone have a very fast view at the pdf and/or the dll and tell me some directions to handle this poblem? Thank you Fabio PS: find attached the DLL and the FCINTF Specification pdf file Download File:post-3137-1131190731.zip OOOPS, The Attachment!! Some additions, hoping this will help others helping me Labview show only the following functions inside the DLL driver: DllCanUnloadNow DllGetClassObject DllRegisterServer DllUnregisterServer Using a third party tool (LibDump) I've extrapolated the atached file which contains the function prototypes contained in the DLL. This generated file is similar to the already posted .IDL file. Take as example the DriverProperties function: HRESULT _stdcall DriverProperties([out] tagFCISTATUS* pStatus); it seems that this function is inside the DL, but the Call Library Function Dialog doesn't show this function in the scroll down menu. Anyway, if I write the name "DriverProperties" in the "Function Name" field, LabView automatically generates the correct function prototype as follows: long DriverProperties(VARIANT *pStatus); meaning that LabView is somehow able to identify the function inside the DLL. BUT, the "Run Arrow" remains broken with the Function Not Found error. HEEEELLPPPPP! Fabio Download File:post-3137-1131271418.txt Quote Link to comment
arbelo Posted November 6, 2005 Author Report Share Posted November 6, 2005 Further Additions: I've found the following phrase on internet: "Furthermore INPROC COM objects are not listed among the exports, as pointers to their exported functions are returned by the factory objects." that probably is why I can't see the functions in labview. Also in "Dependancy Walker" software I can't see the functions that I need. Now the question is: How can I handle Inproc COM Objects with Labview? Is it possible to use a C++ compiler to connect to this DLL and to be recompiled as Labview friendly DLL? Can someone give me directions? Thanks --- Fabio Quote Link to comment
Rolf Kalbermatter Posted November 6, 2005 Report Share Posted November 6, 2005 Further Additions:I've found the following phrase on internet: "Furthermore INPROC COM objects are not listed among the exports, as pointers to their exported functions are returned by the factory objects." that probably is why I can't see the functions in labview. Also in "Dependancy Walker" software I can't see the functions that I need. Now the question is: How can I handle Inproc COM Objects with Labview? Is it possible to use a C++ compiler to connect to this DLL and to be recompiled as Labview friendly DLL? Can someone give me directions? This DLL is a COM DLL and therefore does not export functions to call directly. As such the Call Library Node won't work. If the DLL contains a so called type library or at least is installed with a type library you have a chance to use the Active X interface in LabVIEW. However Active X comes in two flavours. One are Active X Controls which provide some form of user interface and can be inserted in the Active X Container in LabVIEW. The other flavour are Automation Objects without any UI component and they can not be put in an Active X container. Instead you place an Active X refnum on the front panel and then browse from there to the actual object you want to use. Then you wire that refnum to the Open Automation Refnum function which calls the OLE function to instantiate the desired object through the DLL proviced object factory in DllGetClassObject(). Once Open Automation Refnum returns successfully you should be able to wire it to the Property Node or Method Node to select the approriate property to access or method to execute. Don't forget to close the refnum at the end with Close Refnum to avoid memory leaks. Rolf Kalbermatter Quote Link to comment
arbelo Posted November 7, 2005 Author Report Share Posted November 7, 2005 I've done it yesterday evening, I had no time to post the successful result Anyway..... Yes, it works !! :-) Thankyou very much for your help! An additional question is: some methods of this COM DLL are Greyed Out (disabled) Does it mean that it is not possible to use these methods? I'm asking this because the most useful methods appear disabled and so all my efforts in having this COM working are vain. Bye Bye This DLL is a COM DLL and therefore does not export functions to call directly. As such the Call Library Node won't work. If the DLL contains a so called type library or at least is installed with a type library you have a chance to use the Active X interface in LabVIEW.However Active X comes in two flavours. One are Active X Controls which provide some form of user interface and can be inserted in the Active X Container in LabVIEW. The other flavour are Automation Objects without any UI component and they can not be put in an Active X container. Instead you place an Active X refnum on the front panel and then browse from there to the actual object you want to use. Then you wire that refnum to the Open Automation Refnum function which calls the OLE function to instantiate the desired object through the DLL proviced object factory in DllGetClassObject(). Once Open Automation Refnum returns successfully you should be able to wire it to the Property Node or Method Node to select the approriate property to access or method to execute. Don't forget to close the refnum at the end with Close Refnum to avoid memory leaks. Rolf Kalbermatter Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.