Calling extern functions in a c library

Hi I am new to JNI and I am trying to use an existing c library that I have in a java application.
I have written a c function which is called from java class, this works fine, the problem is when i try to call functions located in my c library from this function the code wont compile, giving a linker error. Specifically it wont compile the functions marked as being extern in the header file.
I tried removing extern, but had the same error, I am not a c programmer.
Any help would be really appreciated

Hi,
I doubt you will get a response since this thread is 7 years old. You are better off looking up the documentation for your compiler as this is not really a JNI question.
With gcc you would use -L<lib_dir> -l<lib>
Cheers,
Shane

Similar Messages

  • How to call external functions without a .DLL (just using a .H and .LIB file)?

    Hello everyone,
    actually I'm facing little difficulties on how to get an external function getting called from within CVI (Version 2009).
    I was supplied with a .H file and a .LIB file to call an external function from within my CVI project. The .H file looks like this:
    void exportedFunction(double *parameter);
    As far as I know, the external function was written with MS Visual C++ 6.
    So I tried to statically link to the extern al function like this:
    - Add the .H file and the .LIB file to the CVI project
    - #include the .H file where I needed to call the external function
    - do the external function call
    When building I get an unresolved external function call error from CVI so this seems not to be working.
    I made some searches around and got up with two possible issues. Maybe one of you can help me get a bit further and get things working.
    1) The "real" function code is located in the DLL file which was not delivered to me. Or is there a way to get things done (call external functions) just with a .H and a .LIB file (without any .DLL file included)?
    2) The external function does not export according to "C-Style" rules. The function signature in the .H file shows no things like
    extern "C" __declspec(dllexport) void __stdcall ...
     Or maybe it's a combination of both issues (missing .DLL + wrong export style of function)?
    I guess I could get around the wrong export style of the function when I manage to write a wrapper around the original function that actually uses C-Style exporting. But I guess I need the .DLL file for this try as well.
    Thank you for your answers.
    Best regards,
    Bernd
    Solved!
    Go to Solution.

    There is no need  for the dllexport stuff. There is also the option for a static library without any DLL.  But the 'extern "C"' is essential, because it forces the C++  compiler, which was probably used to compile the library , to use C calling convention.
    If you can't ask the provider of the library to provide a version which was compiled using C calling convention the way to go is to write a wrapper with VC++6 around that library which reexports the functions using C calling convertion. Something like
    extern "C" type0 myfunc1(type1 arg1, ...) {
           return func1( arg1,...);
    for every function , you need to use.
    BTW. "unresolved symbol" is the linker error message, you can expect if you try to link C code against a library build with C++ calling convention.

  • How to call a function of a system library

    I'd like to check the login ID of the current system user.
    Therefor I tried via System.loadLibrary("NETWIN32") to load the requested DLL and to call the functions NWDSCreateContext and NWDSWhoAmI. After the funktion call I got the exception java.lang.UnsatisfiedLinkError: NWDSCreateContext
    Do you have an idea what I'm doing wrong??

    IN general, Windows loads dll's automatically when required by a program. The only requirement is that the dll be on the "search path". Two places you can guarantee will be searched are the directory from which the program was loaded, and the win32 directory.
    There are ways to PREVENT this automatic loading, and instead put it completely under program control. But why would you want to do that?

  • When calling a function in a shared library, are parameters copied locally?

    I have a shared library with a function whose header is:
    void __cdecl nextevent(double Input[], int32_t len);
    When called it sends the values in Input[] to the control Input:
    This vi is compiled to a DLL which uses the header above.
    My question now is: Which of these operations is the correct one:
    1. The Input control is a reference to the array Input[], no values are copied.
    2. The values in the array Input[] are copied to the control Input, the local copy is used by the vi, then the values in the local copy are removed/deallocated.
    It seems reasonable to me that 1 is the correct one, but I can't be sure, and I can't think of any way to check it.
    Lars Melander
    Uppsala Database Laboratory, Uppsala University
    Solved!
    Go to Solution.

    For this particular case option 2 is valid. The reason is that LabVIEW arrays are not just pointers to a memory location but handles. And there is no legal way to create valid LabVIEW handles from an C runtime allocated memory pointer. So LabVIEW converts the incoming array pointer into a handle which is basically nothing else than allocating the handle with a size large enough to  hold all array data, and then copies the data from the array pointer into this handle. After the call, the handle is properly deallocated.
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Call external function from SQL query

    Hi,
    I am new to PL/SQL programming.I don't think this is possible but please let me know if there is a way to achieve this. I have a function written in VB.net and I would want to call from the query.
    create table temp as select id, callvbfunction(note_text) from temp2
    Here callvbfunction is the vb.net function.I need to pass note_text field value to the function.
    Thanks..

    Yes it is possible.
    No idea how to specifically call a .Net function (from Oracle) as I do not do Windows (except for playing games ;-) ). But external procedures (extproc) and Java stored procs can be wrapped by PL/SQL wrapper functions and used in SQL statements.

  • FlvPlayback Skin Custom Button calling external function

    Hi,
    I have a custom movie clip in the flvplayback skin and I am looking for a way to call an external js function. This is what I got inside the skin
    my_object.addEventListener(MouseEvent.CLICK, externalFunction);
    function externalFunction(){
        ExternalInterface.call("ExternalFunction");
    Unfortunately, the ExternalFunction is not being called at all. What am I missing here?
    Any help is highly appreciated. Thanks

    Here you go.
    <div id="customEngine_Container" style="z-index: 10001; border: 0px none; width: 400px; height: 550px; position: fixed; bottom: 100px; right: 100px;">
    <object width="400px" height="550px" id="customEngine_Container_o" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
    <param name="movie" value="customEngine.swf"><param name="quality" value="high">
    <param name="FlashVars" value="movieUrl=customEngine-demo-video.flv&amp;skinUrl=customSkin.swf&amp;width=400&amp;height=550&amp;">
    <param name="menu" value="false"><param name="wmode" value="transparent">
    <object width="400px" height="550px" id="customEngine_Container_o" type="application/x-shockwave-flash" data="customEngine.swf">
    <param name="movie" value="customEngine.swf">
    <param name="quality" value="high">
    <param name="FlashVars" value="movieUrl=customEngine-demo-video.flv&amp;skinUrl=customSkin.swf&amp;width=400&amp;height=550&amp;">
    <param name="menu" value="false"><param name="wmode" value="transparent">
    <a href="http://www.adobe.com/go/getflash">
    <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player">
    </a>
    </object>
    </object>
    </div>
    May I ask, how is it relevant to AS skin calling JS?

  • Calling external C-functions in DLLs with struct as parameters

    Hi all PL/SQL Gurus !
    Is it possible to call external functions in a DLL written in C
    wich has pointers to C-structs as parameter. Can you point me to
    an example or extended documentation about this. I had a look at
    the Oracle doc's but found no examples about structs.
    Thank you very much,
    Stefan.
    P.S.: Konfiguration: Oracle 8.1.7.0.0 Client and Server on W2K-
    SP2 machines.

    Hi,
    I have the same problem with you.Now,have you resolve the problem?
    I want to know how to do.if you resolve it ,could you give me a example.
    thanks .
    best regards!
    Liyf

  • Can Any one tell me what is the step in calling a function from a *.lib file in Labview application

    Hi, I am working on Labview 8.0.
    I am trying to  communicate to a thrid party HW using the driver file he has provided to me.
    The drive file is a *.lib file.
    I am unable to call the function from the lib file.
    I could get only from a DLL.
    Pls help .
    Regards
    -Patil

    patil wrote:
    When it is possible in Lab Windows, why calling a function from a static library is prohibited?
    I was trying to use Function node, but found that it is only for functions from a DLL file.
    Will CIN be useful.? 
    LabWindows is not the same as LabVIEW. LabVIEW cannot call .lib files. LIB files are intermediary products and you need to use a wrapper DLL that's compatible with the object format of the .lib file. It's as simple as that. LabWindows creates C application and from that perspective is no different than a regular C
    compiler. That's why you can call .lib files because that's how .lib
    files are used.
    A CIN, as pointed out, is something completely different and will not help you.  

  • Error while calling external library functions

    Using visual studio I wrote the following code test javascript communication with external C/C++ libraries:
    aabc.cpp :
    extern "C" __declspec(dllexport) char* ESInitialize (TaggedData* argv, long argc);
    extern "C" __declspec(dllexport) long ESGetVersion (void );
    extern "C" __declspec(dllexport) void ESFreeMem (void* p);
    extern "C" __declspec(dllexport) void ESTerminate (void );
    extern "C" __declspec(dllexport) double AddNumbers(void);
    double AddNumbers(double a, double b)
    return a + b;
    long ESGetVersion (void){
    return 5;
    And the code that I wrote in javascript is:
    var obj = new ExternalObject("lib: aabc.dll");
    alert(obj.version);
    var aa = obj.AddNumbers(10, 20);
    alert(aa);
    It seems to me that it loaded successfully due to the output I am getting from the second statement. But I am getting error at the third statement where I called AddNumbers(10,20) function.
    Somebody help me.
    Thanks in advance,
    sailu

    I have the same problem. This is my code:
    extern "C" __declspec(dllexport) char* ESInitialize (TaggedData* argv, long argc);
    extern "C" __declspec(dllexport) long ESGetVersion (void );
    extern "C" __declspec(dllexport) void ESFreeMem (void* p);
    extern "C" __declspec(dllexport) void ESTerminate (void );
    extern "C" __declspec(dllexport) int AddNumbers(int a, int b);
    extern "C" __declspec(dllexport) char* ESInitialize (TaggedData* argv, long argc)
    return "AddNumbers_dd";
    int AddNumbers(int a, int b)
    return a + b;
    long ESGetVersion (void){
    return 17;
    And the code that I wrote in javascript is:
    var obj = new ExternalObject("lib: mydll.dll");
    var x = obj.AddNumbers(10, 20);
    alert(x);
    The version of the library is correct, but when I try to use the function "AddNumbers" I receive this error "AddNumbers is not function".
    What would be the correct procedure to call a function inside a DLL?

  • FRM-40734 when calling external DLL Function from Forms 6

    Even though some answers were given to my previous help request ("Again: Forms 6 and user-defined data types") I wasn't able to solve the problem of passing a parameter of an user-defined type to an external DLL function residing in the SECURSIGN.DLL library (the closest solution was to declare that "composite" parameter using the ROWTYPE clause referencing a custom-made table created just for the sake of defining that perticular datatype).
    So I concentrated on SECURSIGN.DLL functions using more trivial data types, like a function requiring just four character strings as parameters.
    I generated the necessary PL/SQL support using the FFI.
    I discovered that also the simplest calls to external functions fail at runtime with the generic error FRM-40734.
    I located the error: it happens just at the moment of calling the function from within the FFI-generated package body. Before that, the DLL is loaded with no problem, the function is correctly registered, and a function handle is regularly returned.
    As long as I can regularly issue the very same call with the very same parameters from Visual Basic, I can't understand what's going wrong (ALL the needed DLL are in the same directory as the FMB/FMX forms).
    I will greatly appreciate any help that You may be able to provide.

    I have noticed just now that a dump file having a name like ifrun60_dump_299, is generated by FORMS every time I issue the aborted call to the foreign function.
    Inside the form dump file, apart from useless info like Registers and so on, the message:
    "Could not find Module32First"
    By a FILE/FIND/CONTAINING TEXT I searched all the DLLs, and I noticed that Module32First is a routine that can be found within each of the following DLLs:
    Cl32
    d2kwut32
    d2kwut60
    I tried to load those DLLs along with SECURSIGN.DLL by modifying the PROCEDURE LoadLibrary into the FFI-generated PLL code, and I have apparently no problem in loading all the DLLs that I wish, but the error persists, and that dump file is constantly generated, always looking for the "Module32First" routine.
    How can I avoid all that mess and the FRM-40734 error??

  • Error when calling  external  DLL  function.

    When calling a function in Oracle, the error happens
    ORA-28575: '... error RPC connection to external procedures'
    code:
    create or replace library LibFunctions as 'c:\MyDLL.dll';
    grant all PRIVILEGES on LibFunctions to public;
    create or replace
    FUNCTION Max(num1 in number, num2 in number) RETURN number IS
    EXTERNAL LIBRARY LibFunctions
    NAME "Max"
    LANGUAGE C;
    grant all PRIVILEGES on Max to public;
    obs. Dll was created in Pascal.
    What can this error?
    tks,
    Mauricio
    Edited by: user13794390 on 19/01/2011 06:29

    It's been a while since I used extproc. Anyway, it listener.ora make sure extproc is added. I'll assume you are on Unix:
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ENVS = "EXTPROC_DLLS=ANY,LD_LIBRARY_PATH=proper-directory-list")
    (ORACLE_HOME = path-to-oracle-home)
    (PROGRAM = extproc)
    ) SY.

  • Calling external DC functions in BPM

    Hi, we need to call an external function defined in another DC than the process. The help states this is possible by defining a namespace. Where do I put that namespace declaration? In what file? XSD?
    http://help.sap.com/saphelp_nwce711/helpdata/en/c3/fdb196a56b41b38bd7215accabba48/content.htm
    You define the namespace prefix of the DC containing the function you want to use, before using the function.
    Example
    You want to use the function u201CExampleFunctionu201D, created in the project u201Cmy.company.com/myProject1u201D. You define the namespace prefix of the DC containing the project in the following way:
    End of the example.
    Syntax
    xmlns:myProject1 ="my.company.com/myProject1"

    Just put the ns definition in the expression editor.
    Then use prefix:function in the next line.
    Thanks Benny.

  • Calling a function in an external actionscript

    Hi. First of all I'd like to put my hands up and say that what I know about Flash is antiquated (I used to work with Flash 4 / 5), and have now been thrown into the deep end, as it were.
    I have an application that has a button component. In an external actionscript file there's an event listener that calls a function when this button is pressed. I want to replace the button with a graphic that switches according to whether the button is 'on' or 'off'. I've created a movie clip that cycles back and forth between the on and off states when clicked, but the trouble I'm having is getting it to call the function. I have no idea how to do it, other than to just include function_name(); (or call.function_name();) in the onRelease handler (which doesn't work). Is it possible to use event listners for movie clips (rather than components?) Or else how can I call this function? It should be really simple and I'm tearing my hair out trying to get it to work! The function is declared 'public', by the way...
    Oh yes, this is ActionScript 1 (I think...)
    Eternal thanks and gratitude to anyone who can help me...

    Do you mean to copy it here, or copy it into the fla? I've already tried doing the latter, which doesn't work - the script imports other external as files and I think that that's messing things up. The function only seems to work when it's located in this external file. The function I'm trying to call is
    public function toggleAudio() {
           //if (btnAudio.label == "Sound Off") {
           if (_root.audio == "mute" or btnAudio2.label == "Sound Off") {
               trace("toggleAudio AUDIO: Off");
               //btnAudio.label = "Sound On";
               _root.audio = "unmute";
                         // stop recieving audio from in stream
               ServiceLocator.getInstance().getService("nsService").returnInStream().receiveAudio(false) ;
               // stop sending audio on out stream
               ServiceLocator.getInstance().getService("nsService").returnOutStream().attachAudio(null);
                     } else {
               trace("toggleAudio AUDIO: On");
               btnAudio2.label = "Sound Off";
               _root.audio = "mute";
                         // start recieving audio from in stream
               ServiceLocator.getInstance().getService("nsService").returnInStream().receiveAudio(true);
               // start sending audio on out stream
               ServiceLocator.getInstance().getService("nsService").returnOutStream().attachAudio(Servic eLocator.getInstance().getService("camService").returnMic());
    The bit at the beginning where I've commented some stuff out is where I've been trying out different things to get it to work.
    For all intents and purposes though the function could be
    public function please_work() {
    trace("I work!");
    All I need is for a way to call this from the main flash movie

  • Call multiple functions from same dll with call library function

    hi,
    i am working on a project in wich we need to make a UI to read out a sensor network.
    the UI should be usable in any project, but every node needs a different piece of code depending on the type of sensor with wich it is equipt.
    so i need to be able to call different pieces of code when i need them, and still be able to use the UI in future projects with possibly new types of node we now don't have.
    so someone told me to use DLL's, cause then i would be able to call the code i need the moment i need it.
    but i have never worked with DLL's (just learned about this option 3 day's ago) so i have a question.
    i know i can dynamicly change the DLL i call with the call library function, but can i dynamicly change the function i call from that DLL ?
    or do i have to put a new call library function for each function i want to call, even if its from the same DLL ?
    kind regards,
    stijn

    nazarim wrote:
    ok so there is no (easy and ubderstandable) way for me to dynamicly change wich function i want to call from a certain DLL.
    but now i started wondering, the path on the call library function is not ment to dynamicly change a DLL
    but it does work so, if i am carefull, can i use it for that purpose or will labview give me a series of problems once i start using it in larger programs ?
    Thepath on the Call Library Node can be used to load a different DLL. Obviously since you can't change the function name your other DLL would have to export exactly the same function name and of course with the same parameters. This is seldom the case so it is not the main use of the path input to the Call Library Node. It's main use is as indicated to load DLLs at runtime rather than at load time of a VI. So that an application can run even when the DLL is missing, until the moment the functionality from that DLL is needed.
    If you can make sure that all your DLLs export the same function name with the same parameter you can use the Call Library Node to call into different DLLs through the path input. If however you would need to call different function names you would have to resolve to some DLL which does do the dispatching and invocation using LoadLibrary() and GetProcAddress(). But unless you need to go with DLLs for some reason using the Call By Reference Node can give you an even more flexible approach. 
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • PDA: How does the VI in the "Calling External Code (Inline C Method)" example link to the called functions?

    The PDA module provides an example of calling external code via an inline C
    The inline source code from the example:
         OSVERSIONINFO info;
         info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
         Err = GetVersionEx(&info);
         MajorVersion = info.dwMajorversion;
         MinorVersion = info.dwMinorversion;
    The PDA build specification includes *no* additional source files of any kind.  The only source file in the build is the top-level VI.  Where are the definitions for the OSVERSIONINFO type, and the GetVersionEx function drawn from?
    The VI builds and runs fine on the PDA, but I don't understand how.

    Donovan B wrote:
    Hi Dan,
    It looks like there is an OSVERSIONINFO struct and GetVersionEx function available in the coredll.lib for the application to call on a PDA running Windows Mobile 5.0.  On both operating systems, it looks like the GetVersionEx function is defined in winbase.h, so I am not sure if there is some kind of linking between the two or if the header file is automatically included when building the executable or not.  Let me do some more research and I'll let you know.
    The information for the function on Windows Mobile can be found here.
    Message Edited by Donovan B on 12-19-2007 06:33 PM
    While the API functions are mostly the same for Windows Mobile and normal Windows the actual implementation and compilation is obviously not and there is no need for that. Windwos Mobile is typically (not sure if there are other versions at all) ARM based, while the desktop version is x86 based. A huge difference.
    And when LabVIEW creates a PDA executable it mostly creates a bunch of hidden C files, invokes the Visual C for Windows CE
    tool chain and lets it create the executable. The Visual C for Windows CE tool chain comes with its own import link libraries for accessing WinAPI functions and those import link libraries reference the functions in the DLLs as they are implemented for Windows Mobile (CE). There is no kernel32.dll in Windows Mobile and why should it? You can't move normal Windows code that would expect that DLL to Windows Mobile anyhow, since it has a completely different CPU and there is always a complete recompile with the Windows CE toolchain necessary anyhow.
    Rolf Kalbermatter   
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

Maybe you are looking for

  • Calendar split into two in Outlook 2003

    With 8.1, I thought I lost half of my calendar in Outlook, but learned that since the update the entries made on my phone are in one calendar in Outlook, but what I entered in my computer appears on another. How do I combine the two back into one? I'

  • Networks related to WBS

    Is their any function module or BAPI to give details of networks related to particular WBS. Thanks & Regards arkhajnc

  • Change Sales Order, Delivery, Billings Reports

    Hi Gurus, Can any body please tell me is there any Report for change logs of Change Sales Order, Delivery, Billings & Change report of Customer & Material, Regards, Sai

  • Why am I seeing someone elses iTunes ID?

    I just got my new iPhone today. I wanted to load an app, my first one. When I tap 'Install" it comes up with a window asking me to enter a password. Already appearing in this wondow is an earthlink.net ID, but it's not mine. When I do enter in my iTu

  • No sound after ios7.0.6 update!

    Updated to ios7.0.6 now no sound on anything and it's all switched on checked everything!  Music works but that's it anybody had the same problem tried to contact support but they want £25!!!