LIBFUNC SearchProcAddress(void *inst, const char *functionname) { void *lpfn; assert(inst!=NULL); lpfn=dlFindSymbol(inst,functionname); #if defined __WIN32__ if (lpfn==NULL && strlen(functionname)<128-1) { char str[128]; strcpy(str,functionname); #if defined UNICODE strcat(str,"W"); #else strcat(str,"A"); #endif lpfn=dlFindSymbol(inst,str); } /* if */ #endif return (LIBFUNC)lpfn; }
SEXP rdcFind(SEXP sLibHandle, SEXP sSymbol) { void* libHandle; const char* symbol; void* addr; SEXP r; libHandle = R_ExternalPtrAddr(sLibHandle); symbol = CHAR(STRING_ELT(sSymbol,0) ); addr = dlFindSymbol( libHandle, symbol ); r = R_NilValue; PROTECT( r = R_MakeExternalPtr(addr, R_NilValue, R_NilValue) ); UNPROTECT(1); return r; }
MVMObject * MVM_dll_find_symbol(MVMThreadContext *tc, MVMString *lib, MVMString *sym) { MVMDLLRegistry *entry; MVMDLLSym *obj; char *csym; void *address; uv_mutex_lock(&tc->instance->mutex_dll_registry); MVM_string_flatten(tc, lib); MVM_HASH_GET(tc, tc->instance->dll_registry, lib, entry); if (!entry) { uv_mutex_unlock(&tc->instance->mutex_dll_registry); MVM_exception_throw_adhoc(tc, "cannot find symbol in non-existent library"); } if (!entry->lib) { uv_mutex_unlock(&tc->instance->mutex_dll_registry); MVM_exception_throw_adhoc(tc, "cannot find symbol in unloaded library"); } csym = MVM_string_utf8_encode_C_string(tc, sym); address = dlFindSymbol(entry->lib, csym); free(csym); if (!address) { uv_mutex_unlock(&tc->instance->mutex_dll_registry); return NULL; } obj = (MVMDLLSym *)MVM_repr_alloc_init(tc, tc->instance->raw_types.RawDLLSym); obj->body.address = address; obj->body.dll = entry; entry->refcount++; uv_mutex_unlock(&tc->instance->mutex_dll_registry); return (MVMObject *)obj; }
static PyObject* pydc_find(PyObject* self, PyObject* args) { PyObject* pcobj; const char* symbol; void* libhandle; void* funcptr; if ( !PyArg_ParseTuple(args,"Os", &pcobj, &symbol) ) return PyErr_Format(PyExc_RuntimeError, "argument mismatch"); libhandle = PyCObject_AsVoidPtr(pcobj); if (!libhandle) return PyErr_Format(PyExc_RuntimeError, "libhandle is null"); funcptr = dlFindSymbol(libhandle, symbol); if (!funcptr) return PyErr_Format(PyExc_RuntimeError, "symbol '%s' not found", symbol); return PyCObject_FromVoidPtr(funcptr, NULL); }
void* getSelfSymbol(DLLib* pLib, const char* name) { return dlFindSymbol(pLib, name); }