annotate dyncall/dyncall.3 @ 362:78dfa2f9783a

- added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode - added a signature-based syscall to callf testcode - manual clarification about dcReset usage in combination with dcMode
author Tassilo Philipp
date Tue, 14 Apr 2020 16:56:57 +0200
parents 32736025371f
children 71c884e610f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
362
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
1 .\" Copyright (c) 2007-2020 Daniel Adler <dadler AT uni-goettingen DOT de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 .\" Tassilo Philipp <tphilipp AT potion-studios DOT com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 .\" Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 .\" purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 .\" copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 .Dd $Mdocdate$
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 .Dt dyncall 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 .Sh NAME
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 .Nm dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 .Nd encapsulation of architecture-, OS- and compiler-specific function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 semantics
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 .Sh SYNOPSIS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 .In dyncall.h
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 .Ft DCCallVM *
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 .Fn dcNewCallVM "DCsize size"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 .Fn dcFree "DCCallVM * vm"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 .Fn dcMode "DCCallVM * vm" "DCint mode"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 .Fn dcReset "DCCallVM * vm"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 .Fn dcArgBool "DCCallVM * vm" "DCbool arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 .Fn dcArgChar "DCCallVM * vm" "DCchar arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 .Fn dcArgShort "DCCallVM * vm" "DCshort arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 .Fn dcArgInt "DCCallVM * vm" "DCint arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 .Fn dcArgLong "DCCallVM * vm" "DClong arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 .Fn dcArgLongLong "DCCallVM * vm" "DClonglong arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 .Fn dcArgFloat "DCCallVM * vm" "DCfloat arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 .Fn dcArgDouble "DCCallVM * vm" "DCdouble arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 .Fn dcArgPointer "DCCallVM * vm" "DCpointer arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 .Ft DCvoid
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 .Fn dcCallVoid "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 .Ft DCbool
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 .Fn dcCallBool "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 .Ft DCchar
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 .Fn dcCallChar "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 .Ft DCshort
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 .Fn dcCallShort "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 .Ft DCint
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 .Fn dcCallInt "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 .Ft DClong
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 .Fn dcCallLong "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 .Ft DClonglong
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 .Fn dcCallLongLong "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 .Ft DCfloat
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 .Fn dcCallFloat "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 .Ft DCdouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 .Fn dcCallDouble "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 .Ft DCpointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 .Fn dcCallPointer "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 .Fn dcArgF "DCCallVM * vm" "const DCsigchar * signature" "..."
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 .Fn dcVArgF "DCCallVM * vm" "const DCsigchar * signature" "va_list args"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 .Fn dcCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "..."
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 .Fn dcVCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "va_list args"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 .Sh DESCRIPTION
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 The
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 library encapsulates architecture-, OS- and compiler-specific function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 semantics in a virtual "bind argument parameters from left to right and then
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 call" interface allowing programmers to call C functions in a completely
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 dynamic manner.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 In other words, instead of calling a function directly, the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 library provides a mechanism to push the function parameters manually and to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 issue the call afterwards.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 Since the idea behind this concept is similar to call dispatching mechanisms
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 of virtual machines, the object that can be dynamically loaded with arguments,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 and then used to actually invoke the call, is called CallVM. It is possible to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 change the calling convention used by the CallVM at run-time. Due to the fact
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 that nearly every platform comes with one or more distinct calling conventions, the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 library project intends to be a portable and open-source approach to the variety of
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 compiler-specific binary interfaces, platform specific subtleties, and so on...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 .Fn dcNewCallVM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 creates a new CallVM object, where
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 .Ar size
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 specifies the max size of the internal stack that will be allocated and used to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 bind the arguments to. Use
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 .Fn dcFree
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 to destroy the CallVM object.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 .Fn dcMode
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 sets the calling convention to use. See dyncall.h for a list of
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 available modes. Note that some mode/platform combinations don't make any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 sense (e.g. using a PowerPC calling convention on a MIPS platform) and are
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 silently ignored.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 .Fn dcReset
362
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
115 resets the internal stack of arguments and prepares it for a new call. This
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
116 function should be called after setting the call mode (using dcMode), but prior
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
117 to binding arguments to the CallVM (except for when setting mode
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
118 DC_SIGCHAR_CC_ELLIPSIS_VARARGS, which is used prior to binding varargs of
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
119 variadic functions). Use it also when reusing a CallVM, as arguments don't get
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
120 flushed automatically after a function call invocation. Note: you should also
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
121 call this function after initial creation of the a CallVM object, as
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
122 dcNewCallVM doesn't do this, implicitly.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 .Fn dcArgBool ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 .Fn dcArgChar ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 .Fn dcArgShort ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 .Fn dcArgInt ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 .Fn dcArgLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 .Fn dcArgLongLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 .Fn dcArgFloat ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 .Fn dcArgDouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 .Fn dcArgPointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 are used to bind arguments of the named types to the CallVM object. Arguments should
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 be bound in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 .Em "left to right"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 order regarding the C function prototype.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 .Fn dcCallVoid ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 .Fn dcCallBool ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 .Fn dcCallChar ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 .Fn dcCallShort ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 .Fn dcCallInt ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 .Fn dcCallLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 .Fn dcCallLongLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 .Fn dcCallFloat ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 .Fn dcCallDouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 .Fn dcCallPointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 call the function with the bound arguments and returning the named type, where
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 .Ar funcptr
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 is a pointer to the function to call. After the invocation of the function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 call, the argument values are still bound to the CallVM and a second call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 using the same arguments can be issued. Call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 .Fn reset
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 to clear the internal argument stack.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 .Fn dcArgF ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 .Fn dcVArgF ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 .Fn dcCallF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 .Fn dcVCallF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 can be used to bind arguments in a printf-style call, using a signature
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 string encoding the argument types and return type. The former 2 only bind
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 the arguments to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 .Ar vm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 object (and ignore return types specified in the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 signature), whereas the latter two issue a call to the given function pointer,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 afterwards. The return value will be stored in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 .Ar result .
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 250
diff changeset
171 The signature string also features calling convention mode selection.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 For information about the signature format, refer to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 manual in PDF format.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 .Sh EXAMPLE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 Let's say, we want to make a call to the function:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 .Bd -literal -offset indent
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 double sqrt(double x);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 .Ed
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 Using the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 library, this function would be called as follows:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 .Bd -literal -offset indent
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 double r;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 DCCallVM* vm = dcNewCallVM(4096);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 dcMode(vm, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 dcReset(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 dcArgDouble(vm, 4.2373);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 r = dcCallDouble(vm, (DCpointer)&sqrt);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 dcFree(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 .Ed
250
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
193 .Sh CONFORMING TO
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
194 The dyncall library needs at least a c99 compiler with additional support for
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
195 anonymous structs/unions (which were introduced officially in c11). Given that
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
196 those are generally supported by pretty much all major c99 conforming compilers
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
197 (as default extension), it should build fine with a c99 toolchain. Strictly
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
198 speaking, dyncall conforms to c11, though.
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
199 .Ed
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200 .Sh SEE ALSO
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 .Xr dyncallback 3 ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202 .Xr dynload 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 and the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204 .Nm
93
dfde5035d410 - better, more neutral .3 SEE ALSO
cslag
parents: 81
diff changeset
205 manual (available in HTML and PDF format) for more information.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206 .Sh AUTHORS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207 .An "Daniel Adler" Aq dadler@uni-goettingen.de
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208 .An "Tassilo Philipp" Aq tphilipp@potion-studios.com