Mercurial > pub > dyncall > bindings
view erlang/erldc/test/misc_SUITE.erl @ 54:918dab7a6606
- added callback support (comes with some bigger refactoring)
- allow CPython's Py{CObject,Capsule} to be used as 'p'ointers
author | Tassilo Philipp |
---|---|
date | Tue, 02 Feb 2021 20:42:02 +0100 |
parents | 0cfcc391201f |
children |
line wrap: on
line source
%% Copyright (c) 2014 Erik Mackdanz <erikmack@gmail.com> %% Permission to use, copy, modify, and distribute this software for any %% purpose with or without fee is hereby granted, provided that the above %% copyright notice and this permission notice appear in all copies. %% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES %% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF %% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR %% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES %% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN %% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF %% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -module(misc_SUITE). -compile(export_all). -include("../include/dyncall.hrl"). -define(VMSZ, 1024). all() -> [ set_mode, set_bad_mode, reset_after_call, reset_before_call ]. set_mode(_) -> {ok,CallVm} = dyncall:new_call_vm(?VMSZ), dyncall:mode(CallVm,?DC_CALL_C_DEFAULT), {ok,?DC_ERROR_NONE} = dyncall:get_error(CallVm). set_bad_mode(_) -> {ok,CallVm} = dyncall:new_call_vm(?VMSZ), dyncall:mode(CallVm,?DC_CALL_C_X86_WIN32_FAST_MS), {ok,?DC_ERROR_UNSUPPORTED_MODE} = dyncall:get_error(CallVm). reset_after_call(_) -> {ok,Lib} = dyncall:load_library("erldc_testtargets"), {ok,Sym} = dyncall:find_symbol(Lib, "add_one"), {ok,CallVm} = dyncall:new_call_vm(?VMSZ), ok = dyncall:arg_int(CallVm,100), {ok,101} = dyncall:call_int(CallVm,Sym), ok = dyncall:reset(CallVm), {ok,Sym2} = dyncall:find_symbol(Lib, "add_seven"), {ok,107} = dyncall:call_int(CallVm,Sym2). reset_before_call(_) -> {ok,Lib} = dyncall:load_library("erldc_testtargets"), {ok,_Sym} = dyncall:find_symbol(Lib, "add_one"), {ok,CallVm} = dyncall:new_call_vm(?VMSZ), ok = dyncall:arg_int(CallVm,100), ok = dyncall:reset(CallVm), {ok,Sym2} = dyncall:find_symbol(Lib, "add_seven"), ok = dyncall:arg_int(CallVm,200), {ok,207} = dyncall:call_int(CallVm,Sym2).