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

CALL A FUNCTION IN A PROVIDED DLL

Guaglardi__Paul
초급자
1,785 조회수

I have not posted in a while and am not sure that I am in the correct location to pose this question.

Regardless, I have been provided a DLL from which I want to invoke a function that is within the DLL.

I know the function name and the argument list.

I have declared the function.

No mater what I do, set DLL as a resource or go to TOOLS COMPILERS and add the directory to the list of places to look, I am constantly getting UNRESOLVED LINK.

Any help?

How can I get access to this DLL and the functions within this DLL?

0 포인트
12 응답
Steve_Lionel
명예로운 기여자 III
1,785 조회수

If all you have is a DLL, you can't link to it. Linking requires a .LIB - for DLLs an "export .LIB" is created when the DLL is linked.

Since you don't have that, you have to dynamically load the DLL, get the address of the procedure and then call it. This is illustrated in the compiler_f\DLL\DynamicLoad sample that is part of the Intel Parallel Studio XE for Windows Sample Bundle (make sure you get the one for Windows.)

0 포인트
Guaglardi__Paul
초급자
1,785 조회수

Turns out that I do have the .LIB.

So, should I just put the .LIB in the same directory as the DLL?

0 포인트
Guaglardi__Paul
초급자
1,785 조회수

I did put the appropriate .LIB in the folder and then through the TOOLS COMPILERS put the path into the X64 tab for Libraries and it still did not work.  I am confused here why it cannot see the DLL nor the embedded function.

0 포인트
Steve_Lionel
명예로운 기여자 III
1,785 조회수

Just putting the .LIB in the folder doesn't do anything. You have to tell the linker to look in the .LIB. The easiest way to do that is to add the .LIB to your project as if it were a source file. An alternative is to give the name of the .LIB in the project property Linker > Input > Additional Dependencies. 

I would not recommend modifying the Tools ... Compilers tab unless this is a location you want to use for all projects. Linker > General > Additional Library Directories is a place you can add project-specific paths.

The DLL itself needs to be in a place Windows will look for it. In the same folder as the EXE will work.

0 포인트
GVautier
새로운 기여자 III
1,785 조회수

Hello

The static library .lib associated with a dynamic library .dll contains for each function the necessary code to call to each of them.

It must be linked with the application and the .dll file is not required at this step.

At runtime, the .dll file must be in a location where the application can find it, in the same directory as the .exe is a common place. See Windows documentation to get information of search mechanism for .dll.

If you don't have the .lib file, call to .dll functions can be done using the loadlibray and getprocaddress functions. refer to the documentation of these functions.

 

0 포인트
Guaglardi__Paul
초급자
1,785 조회수

Steve, thanks as always.  I did end up adding as a dependency and the error has changed.  Now, instead of saying it cannot find the function name, it is throwing that it cannot open an input file C:\PROGRAM.obj

 

Any clues?

0 포인트
Lorri_M_Intel
직원
1,785 조회수

Perhaps, you needed to put the full filename of your external library in quotes due to embedded spaces?

This looks  suspiciously like the linker was passed this:

             link  foo.obj c:\program files (x86)\SomeDirectory\SomeOther\mylib.lib

and parsed the command line as having these files:

            foo.obj
           c:\program.obj
            files.obj
           (X86)\SomeDirectory\SomeOther\mylib.lib

 

 

0 포인트
Guaglardi__Paul
초급자
1,785 조회수

I have enclosed an image of how I have implemented the entry.

 

C:\PROGRAM FILES\GPS\IP2LIB64.LIB

 

This was entered under LINKER and then under INPUT.

0 포인트
Steve_Lionel
명예로운 기여자 III
1,785 조회수

Enclose the path in ""

0 포인트
Guaglardi__Paul
초급자
1,785 조회수

thanks for the different input.

i have looked at the tips at the bottom of the properties as i move through the lists.

finally, or maybe not, i have the following error: unresolved...cannot open 'JHJHJH.lib'

 

any ideas?

0 포인트
mecej4
명예로운 기여자 III
1,785 조회수

It is not possible to tell you what to do if you report only the error messages without also reporting what steps you took earlier that may have caused those messages to be given.

For instance, the file name 'JHJHJH.lib' is not a random name. You must have typed it in into some Visual Studio setting, perhaps by mistake.

0 포인트
Steve_Lionel
명예로운 기여자 III
1,785 조회수

Attach a ZIP file with your .vfproj file and the buildlog.htm, from the Debug or Release folder after a failed build. This will let us see what you are doing.

0 포인트
응답