ArgPtrMethod
Parameters
Index
Int32
Index of the given argument. Note that
Index is 1-based; the
Index for the first arg is 1 (not 0)
Example 1: Dealing with various data types in a callback
Sub MyFunctionCB(ByVal ExprPartPtr As IntPtr)
Dim ExprPart As New uCalc.Callback(ExprPartPtr)
Dim ucc = ExprPart.GetuCalc()
Console.WriteLine(ExprPart.ArgInt32(1))
Console.WriteLine(ExprPart.ArgInt64(2))
Console.WriteLine(ucc.GetItemOf("Int8").GetDataType().ToString(ExprPart.ArgAddr(3)))
Console.WriteLine(ucc.GetItemOf("Int").GetDataType().ToString(ExprPart.ArgPtr(4)))
End Sub
Sub MyFunctionCallback()
uc.DefineVariable("x As Int = 123")
uc.DefineVariable("xPtr As Int Ptr = AddressOf(x)")
uc.DefineFunction("MyFunc(a As Int32, b As Int64, c As Byte, d As Int Ptr)", uc.PinAddr(AddressOf MyFunctionCB))
uc.Eval("MyFunc(x*10, 1+1, 255, xPtr)")
End Sub
static void MyFunctionCB(IntPtr ExprPartPtr) {
var ExprPart = New uCalc.Callback(ExprPartPtr);
var ucc = ExprPart.GetuCalc();
Console.WriteLine(ExprPart.ArgInt32(1));
Console.WriteLine(ExprPart.ArgInt64(2));
Console.WriteLine(ucc.GetItemOf("Int8").GetDataType().ToString(ExprPart.ArgAddr(3)));
Console.WriteLine(ucc.GetItemOf("Int").GetDataType().ToString(ExprPart.ArgPtr(4)));
}
static void MyFunctionCallback() {
uc.DefineVariable("x As Int = 123");
uc.DefineVariable("xPtr As Int Ptr = AddressOf(x)");
uc.DefineFunction("MyFunc(a As Int32, b As Int64, c As Byte, d As Int Ptr)", uc.PinAddr(MyFunctionCB));
uc.Eval("MyFunc(x*10, 1+1, 255, xPtr)");
}
procedure MyFunctionCB(ExprPartPtr: System.Pointer);
begin
WriteLn(ExprPart.ArgInt32(1));
WriteLn(ExprPart.ArgInt64(2));
WriteLn(ucc.GetItemOf('Int8').GetDataType().ToString(ExprPart.ArgAddr(3)));
WriteLn(ucc.GetItemOf('Int').GetDataType().ToString(ExprPart.ArgPtr(4)));
End;
procedure MyFunctionCallback();
begin
uc.DefineVariable('x As Int = 123');
uc.DefineVariable('xPtr As Int Ptr = AddressOf(x)');
uc.DefineFunction('MyFunc(a As Int32, b As Int64, c As Byte, d As Int Ptr)', MyFunctionCB);
uc.Eval('MyFunc(x*10, 1+1, 255, xPtr)');
End;
void _stdcall MyFunctionCB(uCalcPtr ExprPartPtr) {
auto ExprPart = uCalc::Callback(ExprPartPtr);
auto ucc = ExprPart.GetuCalc();
cout << ExprPart.ArgInt32(1) << endl;
cout << ExprPart.ArgInt64(2) << endl;
cout << ucc.GetItemOf("Int8").GetDataType().ToString(ExprPart.ArgAddr(3)) << endl;
cout << ucc.GetItemOf("Int").GetDataType().ToString(ExprPart.ArgPtr(4)) << endl;
}
void MyFunctionCallback() {
uc.DefineVariable("x As Int = 123");
uc.DefineVariable("xPtr As Int Ptr = AddressOf(x)");
uc.DefineFunction("MyFunc(a As Int32, b As Int64, c As Byte, d As Int Ptr)", MyFunctionCB);
uc.Eval("MyFunc(x*10, 1+1, 255, xPtr)");
}
static void MyFunctionCB(uCalcPtr ExprPartPtr) {
auto ExprPart = uCalc::Callback(ExprPartPtr);
auto ucc = ExprPart.GetuCalc();
Console::WriteLine(ExprPart.ArgInt32(1));
Console::WriteLine(ExprPart.ArgInt64(2));
Console::WriteLine(ucc.GetItemOf("Int8").GetDataType().ToString(ExprPart.ArgAddr(3)));
Console::WriteLine(ucc.GetItemOf("Int").GetDataType().ToString(ExprPart.ArgPtr(4)));
}
static void MyFunctionCallback() {
uc.DefineVariable("x As Int = 123");
uc.DefineVariable("xPtr As Int Ptr = AddressOf(x)");
uc.DefineFunction("MyFunc(a As Int32, b As Int64, c As Byte, d As Int Ptr)", ucPinAddr(MyFunctionCB));
uc.Eval("MyFunc(x*10, 1+1, 255, xPtr)");
}
DLL import code
<DllImport(uCalcDLL, CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl, EntryPoint:="ArgPtr")> _
Private Function ArgPtr__(ByVal ExprPartHandle As IntPtr,ByVal Index As Int32) As IntPtr
End Function
[DllImport(uCalcDLL, CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl, EntryPoint="ArgPtr")]
protected static extern IntPtr ArgPtr_(IntPtr ExprPartHandle, Int32 Index);
{DLLImport}function ArgPtr__(ExprPartHandle: System.Pointer;Index: Int32): System.Pointer; cdecl; external uCalcDLL name 'ArgPtr';
typedef void * (* __ArgPtr)(void *ExprPartHandle, int32_t Index);
[DllImport(uCalcLib, CharSet=CharSet::Ansi, CallingConvention=CallingConvention::Cdecl, EntryPoint = "ArgPtr")]
static void * ArgPtr_(void * ExprPartHandle, Int32 Index);