Function calls to a dll compiled by matlab

In matlab I created a dll. I now need to access the functions within this dll from my java application.
How is this achieved?
Thanks,
Anuj.

Could you provide example code to how a method in a dll,
that wasn't compiled in java can be accessed. The method
i am trying to call is called "test" and the dll is called test.dll.You cannot call a dll directly from java, as jsalonen suggested. Instead you have to create a JNI DLL and do all the native work you wand from there.
In the native implementation of the test method you should call LoadLibrary to load the matlab dll and GetProcAddress to get the addresses of the functions that you want to call. As you can see, we have now switched from Java Programming to Windows development, so if you have trouble doing the above, then you should try to find a more appropriate forum to post your questions
LoadLibrary function:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp
GetProcAddress function:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp
DLLs in general
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dynamic_link_libraries.asp
Hope these help.

Similar Messages

  • Using a "fopen" call in a DLL made with MatLab for Labview

    Dear Sirs:
    My name is Juan Crespo and I write you from Spain. I answer if you could help me with a Labview problem. This is the problem.
    I want to write a DLL for being used in labview, and i want to use matlab for write this DLL. I have been searching in the web and reading the NI "using external code in labview" manual in order to know what I must do.
    I know that if I want to use MatLab, I must build a "wrapper function" to avoid the different data type between MatLab and C. I have found on the web -Thanks to Alberto Sanchez- one example about how could a DLL could be written.
    But it exist one diference: I want to read a plain text file that has the input data. so I must read the file, store
    the data in an array and then pass this array to the "interface functions" but in a simple example this dont works
    My question is ¿How could I open a text file in order to use it as input data in a DLL in Matlab?
    Attached to this message is the code I use as "wrapper function". when I compile it there is no apparent errors, but when I try to use the DLL in a VI, an error appears.
    If I change this code and the input is made "manually" (using the VI) there are no errors. So I think that problem is in the way that Labview consider "fopen" function when I build a DLL. The "num.txt" file, where the data input are, is on the same directory that dll file and VI file.
    I hope that you can help me with this problem.
    Thank you very much in advance and please sorry for my bad english
    Best Regards
    Juan Crespo
    Attachments:
    foo_wrapper.c ‏2 KB

    Dear Juan Crespo,
    normally I don't answer questions concerning Matlab because I have no experience with it. But your question was waiting a long time and had to do something with DLL I decided to look at it.
    Your C code has a serious error. You are declaring a variabale named "in1" as "double *". You do not set this pointer to point to a variable. Then you use this uninitialized pointer in the fscanf function to read in from the file. The value is written somewhere in the address space at a place where "in1" is pointing randomly. This will cause an error or crash.
    Declare "in1" as "double" like you have declared "out". You must change some other places where you have used "in1".
    Waldemar writing from Germany
    Waldemar
    Using 7.1.1, 8.5.1, 8.6.1, 2009 on XP and RT
    Don't forget to give Kudos to good answers and/or questions

  • How to auto-recognize the function parameters called from a DLL built by VC6.0

    Hi,
    I use Teststand 3.5 with C/C++ Adapter, and the DLL is built by VC6.0.
    While I specify module for an action, the parameters of a function called from the DLL are not recognized.
    Since I have the DLL source, I know I can select the source file and verify prototype in the "Source Code" Tab.
    Under the way, almost parameters can be recognized, but some parameters, e.g. HANDLE or I definded, can not ( shows error message "The function definition cannot be found in the source file...").
    How to recognise these parameters?
    Thanks.

    The problem isn't that TestStand doesn't have enough native types. A handle can be represented in a TestStand numeric variable just fine. Instead, the issue is that when you select Verify Prototype, TestStand doesn't fully pre process your headers and compile your code to determine the types. To do so would require TestStand not only to be a full C/C++ compiler but it would also have to be able to read your compiler's projects and settings to resolve include paths, macros, etc.
    Since TestStand is not a C/C++ compiler, it just looks for the standard basic data types plus a few more that are common in test code.  Other data types will not be automatically recognized even if they can be mapped to TestStand types.
    Another option it to create a type library for your dll so that TestStand can automatically read the data type information from it. However, I don't know if that works for struct parameters and I looked for the document on devzone that explains how to do that in VC++ and it has been moved or deleted
    Maybe an AE would know of a link to a current document that describes how to do this?

  • Trouble with TestStand running VB DLLs compiles in separate threads

    I have an application that uses DLLs written in VB 6 to manipulate hardware. The hardware is Stepper Motors controlled via the NI CAN bus card, and two instruments controlled via the GPIB PCI card. I have written the two DLLs to use the same NI PCI GPIB and the same NI CAN BUS card. (One instrument per DLL and One Motor per DLL)
    Test stand is then creating the DLLs and running them in separate threads. I have the one DLL Call in a subsequence running as a separate thread, and the other DLL is in the main sequence. I have a GOTO step with preconditions set so that the main sequence only continues after the separate thread in the subsequence is finished.
    The problem I am having is that these D
    LLs work OK when I run them both in the VB debugger. The program even works when I run the main thread in the debugger, and the subsequence is run compiled.
    The problem is, that if I try to run both of these DLLs compiled It seems as if the subsequence DLL never executes.

    To Tuxamation -
    Nothing comes to mind as to why this would happen. VB 6 automation DLLs are used all the time for code modules.
    Note that when MSVB debugs a DLL, it is actually running the DLL as an EXE server within the MSVB process and not in TestStand's process that is using it. I typically found that there is typically a subtle difference in behavior between running the server as an EXE or DLL server.
    A simple way to determine if the TestStand call is reaching your DLL is to place a MsgBox function call in the DLL entry point and immediately return, ie. bybassing your existing code.
    So, if the call is being made to your DLL, you could then enable the Visual Basic project option on the Compile tab, "Create Symbol Debug Info" and recreate your VB DLL.
    You can then attach Microsoft Visual Studio (C++ debugger) to the TestStand process, open the file that contains the entry point in to DLL that TestStand calls, set a breakpoint, and see if the breakpoint is reached.
    Scott Richardson
    Scott Richardson
    National Instruments

  • Simulation model which call functions in an other dll...

    I have a C simulation model that I implement like NI Model Framework template (NI_VStand_Model_Framework_Guide.pdf ). If I use this simple model I can deploy on my PXI. But I must call functions which are in an other dll. When I call functions in other DLL I can't deploy because Veristand specify that the model is not compatible.
    NI VeriStand: The specified compiled model is not compatible with NI VeriStand.
    =========================
    NI VeriStand: NI VeriStand Engine.lvlib:VeriStand Engine Wrapper (RT).vi >> NI VeriStand Engine.lvlib:VeriStand Engine.vi >> NI VeriStand Engine.lvlib:VeriStand Engine State Machine.vi >> Model Execution.lvlib:Initialize Model Loop Data.vi >> SIT Model API.lvlib:Initialize Model.vi >> SIT Model API.lvlib:Load Model DLL.vi
    <append>=========================
    NI VeriStand: Failed to load c:\ni-rt\NIVeriStand\Models\LD1_T1.dll
    If I use DLL Checker there is no bad import.  How to add a simulation model in veristand which call function in an other DLL?

    Thank you for your answer.
    I know how to import a dll in veristand. My Dll  is LD1_T1. I can import it in Veristand without error. But this DLL depends of an other dll (addition.dll) as you can see in the print screen.
    When I try to deploy to my PXI I have an error message of compatibility. 
    NI VeriStand: The specified compiled model is not compatible with NI VeriStand.
    =========================
    NI VeriStand: NI VeriStand Engine.lvlib:VeriStand Engine Wrapper (RT).vi >> NI VeriStand Engine.lvlib:VeriStand Engine.vi >> NI VeriStand Engine.lvlib:VeriStand Engine State Machine.vi >> Model Execution.lvlib:Initialize Model Loop Data.vi >> SIT Model API.lvlib:Initialize Model.vi >> SIT Model API.lvlib:Load Model DLL.vi
    <append>=========================
    NI VeriStand: Failed to load c:\ni-rt\NIVeriStand\Models\LD1_T1.dll
    For LD1_T1.dll I have use NI Model Framework template (NI_VStand_Model_Framework_Guide.pdf ).
    If I check my Dll with dll checker it's ok but I can't deploy. 
    Please somebody have an idee to deploy my model ?

  • What is the proper method to access exported functions in a DLL compiled for a CE (Arm) target?

    I have been trying without success to access functions in a DLL that is targetted for Windows CE.  My Labview application target is an Arm-based TouchPanel device.
    Solved!
    Go to Solution.

    Well, you can't load an ARM DLL into a VI that is loaded on Windows. The ARM DLL has a different object format, that the Windows loader doesn't know and even if it did, the Intel CPU can't interpret the ARM opcodes in that DLL.
    In order to be able to load and debug your application on your host system, you need to create a so called stub library. This is a DLL, compiled for the host system, that provides one equally named function for every function in the target DLL, that you want to call. You create such a DLL in Visual Studio, by taking the header file and adding an (empty) function body to each function you want to call, and then compiling this into a DLL.
    Of course you won't be able to debug the DLL call itself on the host system, unless you fill in some sensible functionality into the stub function yourself, but you can load the VI hierarchy and debug other aspects of your application.
    I haven't played with this specific part of mobile development yet but I believe that you can debug the VI in question from your host system when you start it under the mobile target. But you still need to provide the stub DLL, so that LabVIEW can load the VI into memory. The actual execution happens on the target and the data is transfered back to the host  system through a debug channel to be displayed in that VI, but the stub DLL is required so LabVIEW can load the entire VI hierarchy to allow debugging the VI.
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Thrid party DLL function call.

    Hello,
    I am a programming novice trying to learn more about Java. I am currently working on a project for my employer (a side project really) that is used in generating some specific alpha-numeric codes. Actually, I am re-writing an existing program into Java as a personal exercise for myself but it may have some useful applications down the line.
    This project requires me to use a 3rd party DLL function call. I have been trying to follow through the process of using the JNI interface, however, I believe that I need to create a wrapper DLL to handle the function call. Does anyone know how to do this or can they point me in the right direction? I believe the 3rd party DLL was written in C++ but that's all I know at this point.
    Any help is appreciated.
    TIA

    To those of you who will look this topic up and wonder how I was able to do that here:
    (using Visual C++ for the example)
    3rd party DLL : Key32.dll
    wrapper DLL: Key32Liaise.dll
    SWIG interface: Key32Liaise.i
    wrapper class: Key32Liaise
    1) Make reference to your external function call as if it were a class method. The class name should be that of your "wrapper" class. (e.g. Key32Liaise.getHashCode() ) I like to call the wrapper class the "laise" class because it acts as the go-between.
    2) Download SWIG. Create your interface file and run the command: swig -java -shadow -c++ Key32Liaise.i This will generate Key32Liaise.java shadow class and Key32Liaise_wrap.cxx wrapper code.
    3) Compile the Java code into Class files and generate a header file for the wrapper class (i.e. javah Key32Liaise). You will need this header file even though the SWIG site doesn't mention this.
    4) Open VC++ and open a new project file Key32Liaise to create a DLL. Write the C++ code that calls up the function from the Key32.dll file. You will have to look that up from the MSDN site...too much to put down here.
    5) Include the appropriate files and complile the wrapper DLL.
    Hope that make sense!!!

  • Does anyone have an example VI about how to call the animatewindow function in the user32.dll using CLN in Labview?

      I want to call the WinAPI function-animatewindow in user32.dll to produce some special effect when showing or hidding windows, but i don't know how to using this Win API to achieve my purpose?
      Does anyone have an example VI about this application?
      Thanks in advance for your help.

    You have to use the Call Library Function Node to call Windows API functions. The animatewindow function itself has some pretty simple parameters. You first need to get the window handle. There are a set of Windows API Function Utilities (32-bit) for LabVIEW that you can use. In there there is a VI (Get Window Refnum) that gets the window handle. It's a simple call to a Windows API function. You would call the animatewindow function in the same way. In this case there are 3 parameters: the window handle (returned by a FindWindow API call), a DWORD (32-bit integer) for the duration, and another DWORD for the flags.

  • Error 0x80040707 - DLL function call crashed QTInstallCode

    Installing QuickTime Stand-Alone QuickTimeInstaller.exe Version 7.0.4.0 I get the following error and QuickTime will not load or function:
    Unhandled Exception
    Error Number: 0x80040707 - DLL function call crashed: QTInstallCode.QuickTimePostInstallProc
    Setup will now terminate.

    I was able to solve this, but I had to uninstall all instances of iTunes, ipod and QuickTime, delete their directories, use http://support.microsoft.com/kb/290301/
    to delete the installations of each and then use msconfig to remove them from the Startup.
    After that I rebooted and did a new install with the QuickTime Stand Alone and it worked!

  • Calling a dll that has an unsigned char, unsigned char * in a function call

    I have a dll that has the following function that I am trying to call from LabView
     GetAvailableData( unsigned short * Num1,   unsigned short * pList,   unsigned short in,   unsigned short * ip  )  
    In this, the second parameter is an output. When I use call library function node, I  use the second arg to create an indicator. When I run this program, I see the return value to be zero.
     I use the following for arg2:
    Name: arg2
    Type: Numeric
    Data type: 16bit Integer
    Pass: Pointer to value
    Any help is appreciated. 

    dinks-
               Just some janitorial work first: when posting try and keep the spaces between lines to a minimal. Empty spaces just means less memory somewhere. To your question, I think some clarification is needed. Tell me if this is right, you have a dll that you are calling into LabVIEW using Call Library Function node and then trying to get this unassigned character.
     Yes. That is correct. 
    It returns 0 but it should be giving something else (what should it be returning?). Are you getting any errors running this or you are just not getting the expected value back? Thanks for the clairfication!!
    Thanks for the response. I think there are lot of nitty gritty details when calling a c++ dll from LabView that I need to learn. The unsigned char problem is solved when I modified the output to Array in Labview.
    I have issues using C++ functions that return a bool value. 
    The other problem is with C++ functions that return a HANDLE.
    In the first case where the return value is bool, I assigned the return value in LabView to  Signed 32 bit integer when I call this function,  the return bool value is some large number always irrespective of the C++ bool value (true or false).
    For the second case (return type HANDLE), I assume, I should specify the return value as signed 32 bit integer in the configure option of call library function node. I tried that and it returns the same value. The dll returns non zero if my hardware that I am interfacing with is found. If it doesn't find the hardware, the return HANDLE is 0. The Labview program returns the same value if I enable the hardware or disable the hardware.
    I am following the  Call DLL.vi example for using various data types in C++. 
    Really appreciate your help.

  • LabVIEW call Win32 API DLL function from third party

    Hi everyone,
    I'm trying to build a LabVIEW 2010 interface on 32-bit Window XP system to configurate and communicate to an Anglient laser head through its USB expansion box. I contacted the vendor and they shared a win32 API with some dll files. I started with a function called "A55292Find", but the CLF node always pop up error 1097.I checked the MSDN to get the corresponding LabVIEW data type for CLF.
    My question is: Do I need to initialize those arguments? (How can I know the values of them if initialization is needed?)
    Could anyone help me figure out what's the problem?
    Here is what I have from API documents about this function:
    The A55292Find function returns lists of handles and board types for all the 55292 USB
    Expansion Modules connected to the system.
    A55292RC __cdecl A55292Find(
    HANDLE hBoxes[], // List of handles for the boxes found. (as Unsigned 32-bit integer numeric)
    BOARDTYPE PortABrdType[], // List of board types for slot A boards (as Unsigned 16-bit integer numeric)
    BOARDTYPE PortBBrdType[], // List of board types for slot B boards (as Unsigned 16-bit integer numeric)
    WORD *spMaxBoxes); // dimension for all of the passed arrays. (as Unsigned 16-bit integer array data pointer)
    // (function return type as Unsigned 32-bit integer numeric)
    Parameters
    HBoxes[] Array that will receive the list of HANDLES for all the 55292 boxes connected.
    PortABrdType[] An array that will receive Slot ‘A’ board type information for each 55292 box.
    PortBBrdType[] An array that will receive Slot ‘B’ board type information for each 55292 box.
    spMxBoxes Passes the maximum number of values that can be held in hBoxes, PortABrdType, and PortBBoardType arrays to the A55292Find routine and returns the actual number of boxes found
    The return value will be one of the following A55292RC return codes:
    Value Meaning
    A55292_NO_ERROR No error
    A55292_TIMEOUT Timeout accessing a shared memory
    Remarks
    This routine must be called to obtain handles and board type information used in calling all the other routines. If there are significantly more array elements than boxes, the routine will take longer to complete.
    These are the definitions: 
    typedef DWORD A55292RC; enum{A55292_NO_ERROR, A55292_HANDLE_ERROR,...}
    typeder WORD BOARDTYPE; enum{A55292_PCAL_BOARD, A55292_NO_BOARD, ...}
    Thanks a lot,
    Kang
    Solved!
    Go to Solution.
    Attachments:
    call A55292Find.vi ‏10 KB

    nkang11 wrote:
    Hi Mr. Kalbermatter,
    As you told me, I should try to use the defined enumeration words as control and indicator.
    For the previous CLF node, it successfully returned the hardware configuration (I have only connected a board at slot A):
    But I really want to see a string return as "A55292_PCAL_BOARD" which is defined by "typedef WORD BOARDTYPE; enumeration {...}; Does that mean I need to change the data type or do something like "converter"? Or initialize the array first, then convert it to string type?
    Right now, I'm trying to open the laser card by using "A55292PcalOpen(HANDLE hDev, SLOTSELECT SlotSelector);" function which requires to use the enumeration constants from " typedef WORD SLOTSELECT; enum {A55292_PORT_A, A55292_PORT_B};" but I'm confused to shot an constant control to a new CLF node.
    Since almost all of the arguments in dll function are typedefined as WORD, short and struct et al, I hope you could give me some hints on it.
    Thank you very much sincerely!
    Kang
    Depending on the actual C implementation you can simply create a LabVIEW enum with the according item names or use a ring control instead. Teh enum requires the numeric values of the items to be in consecutive order without any gaps in between. This is a given if the C definition never assigns a specific number to the item. If the C enum is not consecutive you need to go with a ring control instead.
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Calling function wsastartup() of wsock32 DLL

    Could someone tell me how to use the function "wsastartup()" of wsock32.dll to initial a network connection?
    Here is the definition of the wsastartup() function:
    int WSAStartup(
    __in WORD wVersionRequested,
    __out LPWSADATA lpWSAData
    Parameters
    wVersionRequested [in]
    The highest version of Windows Sockets specification that the caller can use.
    The high-order byte specifies the minor version number; the low-order byte specifies the major version number.
    lpWSAData[out]
    A pointer to the WSADATA data structure that is to receive details of the Windows Sockets implementation.
    Return Value
    If successful, the WSAStartup function returns zero. Otherwise, it returns one of the error codes listed below.
    For more wsastartup() detail, please visiti
    http://msdn.microsoft.com/en-us/library/ms742213%28VS.85%29.aspx
    I've tried many times and that cause labview to crash.
    Please give an example, thanks.
    Devin

    smercurio_fc wrote:
    The LabVIEW network functions don't operate at that low of a level. Based on what you are looking to get, it seems to me that a third-party software solution would be far easier to use than to try to call Windows API functions from LabVIEW. Have you tried Google to find such software?
    I would say it depends what network throughput numbers the OP wants to calculate. If sending out data through TCP/IP to some remote location and calculating the maximum or average possible throughput from that it could certainly be done in native LabVIEW. One thing to watch out here is that LabVIEW uses the network socket API in a specific way that is for instance not suited for high througput server applications. So the numbers calculated in such a way would be meaningful in comparison with each other but not necessarely a good indication what a high througput server application could achieve using overlapped and/or I/O Completion Ports Winsock calls.
    If it is about generic data about the winsock usage then there are IPHLP.DLL APIs to get at some of that data and some is available through the registry in the Performance data section.
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Error: 0X80040707 DLL Function call crashed: QTInstallCode.QuickTimePostIns

    Hi,
    After installing the latest Quicktime on my XP 64-bit OS I get the following error message:
    Error: 0X80040707
    Description: DLL Function call crashed: QTInstallCode.QuickTimePostInstallProc
    Running quicktime and iTunes has not been a problem in the past.
    I done have absolutely everything that is avaliable on the support site. And I still have had no luck. Please help, I really appreciate it.

    That worked. Thanks for your help.
    I hope I dont have to encounter this problem again with Apples next release of iTunes or for that mater Microsofts next update patch.

  • How to get parameter information on DLL function call (CVI) in TestStand?

    Hi,
     I wrote a simple Instrument Driver in CVI, and it has 3 parameters Voltage, Current, Channel.
    I made a DLL in order to call this function in TestStand as an action.
    That works fine, the only problem I have is that it shows my function as DC_Conf (arg1, arg2, arg 3) and I only get the type information like double double int.
    I do not get the parameter names Voltage, Current, Channel...
    How can I get this information to be displayed in TestStand so I know which parameter arg 1-3 is Voltage,Current,Channel in case I forgot?
    or 
    Is there a way to display the help text of the driver in TestStand?
    I tried clicking on the (?) button next to the function call but it did not do anything...
    My TestStand is version 4.1
    Thanks...Ness

    Ness,
    When TestStand populates the parameter information, it does so by looking at the dll's type library.  CVI automatically creates a type library for a dll based on the function's signature, which can include the parameter names.  However, if the function prototype does not contain variable names, then CVI cannot include names in the type library.
    You can define your own type library to directly control the information available to TestStand from your dll.  If you want to define your own type library, you can do so using a .fp file.  This will allow you to use complex data types (such as structs), and to rename your parameters.
    Here's a KnowlegeBase describing the process: Embedding Type Libraries in a LabWindows/CVI DLL for use in TestStand
    Either solution proposed here will work, and they each have tradeoffs:
    You can definte the variable names in the function prototype.  This keeps the functions self-documenting, and is the easiest solution.
    You can create a .fp file and define your own type library.  This allows you the most control over exactly what you will see in TestStand, but requires you to create a new file, and to keep that new file up to date if you make any changes to your source code.
    Message Edited by Josh W. on 12-11-2009 01:08 PM
    Josh W.
    Certified TestStand Architect
    Formerly blue

  • Calling Window's Dll Functions from Java

    Hello Audience,
    Is there a way to call Win32/64 based Dynamic-Link-Library functions from Java?
    Thanks,
    GenKabuki

    Yes.
    In general, if you are trying to call functions in an existing dll, you will have to write a "wrapper" dll that meets the java jni interface requires. There are tools around wich purport to generate these for you. Do a google serach; among other tools, you should turn up JACE.

Maybe you are looking for

  • Problems when downloading a file using jspsmartupload

    i am using jakarta tomcat 4.03 in linux .... to upload the file its ok .... im using this code here : String path = application.getRealPath("/upload"); try { count = mySmartUpload.save(path); it works fine ...... but when i try to download ..... putz

  • Migrate to oracle from my-sql

    I have this database running in my-sql. nOw i want to convert into ORACLE.Can anyone shed light on this please..does sql loader support this? Thanks in advance..your help will be much appreciated.. ashish

  • TS4002 iCloud won't let me access using OS10.7.4 mail

    I am unable to access my email from iCloud on OS 10.7.4 mail.  The incoming mail server is set in light gray and cannot be changed to the the recommended imap.*.  It hard written as a curious po4-imap.*  Is there anyone out there who can help me with

  • How can I remove redundant entries it the "Open With" pull down?

    In Mountain Lion, now, when I right click on a document or image and move down to "Open With" I get a triple redundant (long) list of applications that might do the task. How can I purge the list of all the duplicates?  Part of the problem COULD be t

  • Moving from 2009 Mac Pro to 2012

    I have an early 2009 Mac Pro, and a mid-2012 Mac Pro. Can I simply pull the hard-drives out of the 2009 and put them in the 2012 and be good to go, or are there hardware-specific aspects of the installation (i.e., Apple stuff) that will not work beca