Re: IDL and C- [message #39475 is a reply to message #39413] |
Mon, 24 May 2004 11:51   |
MKatz843
Messages: 98 Registered: March 2002
|
Member |
|
|
> .... I then tried the following code:
> image = ptr_new(bytarr(call_external("C:\Users\11ryan\CIDLFinal\testDLL\Debug\testDLL.dll ","testDLL")))
> window, xsize=640, ysize=480 ;--- open a window for display
> help, image
> tvscl, *image
>
> And the help, image says that it is a pointer, but when trying to
> display it i get an error saying TVSCL: Width and Height must be less
> than 32000. It looks as if it is trying to take the value and use it
> as a dimension instead. Any more advice on what I could try? ...
When you say
BYTARR(something) you're creating a new array of zeros with a size
given by "something." That's not what you wanted. You might want the
BYTE() function, but even that should be unnecessary. I have found
that in some cases, it's important to use a RETURN_TYPE keyword with
call_externals. You're talling the call_external what type of data is
being returned. Double check the list below with the IDL manual, but I
think it goes like this:
1 = Byte
2 = Integer
3 = Longword Integer
4 = Floating-point
5 = Double-precision floating
6 = Complex floating
7 = String
8 = Structure
9 = Double-precision complex
10 = Pointer
11 = Object reference
12 = Unsigned Integer
13 = Unsigned Longword Integer
14 = 64-bit Integer
15 = Unsigned 64-bit Integer
Your camera software will probably return Byte or Unsigned Integer
types (or a pointer to them). So in the Call_External, you'd add
RETURN_TYPE = 1, if appropriate.
image = ptr_new( call_external("...testDLL.dll","testDLL",
RETURN_TYPE=1 ) )
If that doesn't work, figure out exactly what types these data are
coming back as.
IDL> print, size( call_external("...testDLL.dll","testDLL") , /type)
See the SIZE() function for more information on this.
If it's returning a pointer, then don't do the RETURN_TYPE=1 above.
M. Katz
|
|
|