Hello,
Disclaimer: I am a newbie at all things C, including CFFI. Thus what I am
trying to do may not be possible. The following is on Windows 7. I use
clisp on cygwin.
I am trying to link to a VISA library (VISA is used to control data
acquisition instruments), visa32.lib compiled for Windows. The library is
shipped with Tektronix software.
The manual gives examples of using the library using C++, and I am trying
to follow the first example. To me it looked pretty much like C - no
objects, templates at least.
Problem: defcfun cannot find the function.
Here is the example code:
#include <visa.h>
#include <stdio.h>
#include <memory.h>
// This example opens a specific GPIB device, does an *idn query
// and prints the result.
int main(int argc, char* argv[])
{
ViSession rm = VI_NULL, vi = VI_NULL;
ViStatus status;
ViChar buffer[256];
ViUInt32 retCnt;
// Open a default session
status = viOpenDefaultRM(&rm); <--------------- I want to access this
function
if (status < VI_SUCCESS) goto error;
// Open the GPIB device at primary address 1, GPIB board 8
status = viOpen(rm, “GPIB8::1::INSTR”, VI_NULL, VI_NULL,
&vi);
if (status < VI_SUCCESS) goto error;
... etc
My cffi code is:
(cffi:defctype ViSession :int)
(cffi:defctype ViStatus :int)
(cffi:defcfun ("viOpenDefaultRM" vi-open-default-rm
:library tek-visa) ViStatus
(rm ViSession))
And the library is defined thus:
(cffi:define-foreign-library tek-visa
(:windows *VISA-lib*)) ;; *VISA-lib* contains path to the library
(cffi:use-foreign-library tek-visa)
defcfun gives warning that the foreign function does not exist.
Using `nm' I did find:
00000000 I __imp__viOpenDefaultRM@4
00000000 T _viOpenDefaultRM@4
I tried using these (and some variants), but got the same message.
Now, this is a Windows library, and clisp is on Cygwin. Could that be the
problem? Any other thoughts?
Thank you,
Mirko