From 011de35360e8f3b22809f21055ccaff62ba7b212 Mon Sep 17 00:00:00 2001 From: Mathieu Malaterre Date: Fri, 10 Mar 2006 11:32:09 -0500 Subject: ENH: Hopefully have the DynamicLoader to the proper thing. --- Source/kwsys/DynamicLoader.cxx | 20 ++++++++++++++++++-- Source/kwsys/testDynamicLoader.cxx | 9 +++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Source/kwsys/DynamicLoader.cxx b/Source/kwsys/DynamicLoader.cxx index 8584a84..cc6a1d5 100644 --- a/Source/kwsys/DynamicLoader.cxx +++ b/Source/kwsys/DynamicLoader.cxx @@ -220,12 +220,24 @@ int DynamicLoader::CloseLibrary(LibHandle lib) DynamicLoaderFunction DynamicLoader::GetSymbolAddress(LibHandle lib, const char* sym) { void *result; +#ifdef __BORLANDC__ + // Need to prepend symbols with '_' on borland compilers + size_t len = strlen(sym); + char *rsym = new char[len + 1 + 1]; + strcpy(rsym, "_"); + strcat(rsym+1, sym); +#else + const char *rsym = sym; +#endif #ifdef UNICODE wchar_t wsym[MB_CUR_MAX]; - mbstowcs(wsym, sym, MB_CUR_MAX); + mbstowcs(wsym, rsym, MB_CUR_MAX); result = GetProcAddress(lib, wsym); #else - result = (void*)GetProcAddress(lib, sym); + result = (void*)GetProcAddress(lib, rsym); +#endif +#ifdef __BORLANDC__ + delete[] rsym; #endif // Hack to cast pointer-to-data to pointer-to-function. return *reinterpret_cast(&result); @@ -317,7 +329,11 @@ const char* DynamicLoader::LibPrefix() //---------------------------------------------------------------------------- const char* DynamicLoader::LibExtension() { +#ifdef __CYGWIN__ + return ".dll"; +#else return ".so"; +#endif } //---------------------------------------------------------------------------- diff --git a/Source/kwsys/testDynamicLoader.cxx b/Source/kwsys/testDynamicLoader.cxx index ac553e2..23a422d 100644 --- a/Source/kwsys/testDynamicLoader.cxx +++ b/Source/kwsys/testDynamicLoader.cxx @@ -46,6 +46,7 @@ kwsys_stl::string GetLibName(const char* lname) */ int TestDynamicLoader(const char* libname, const char* symbol, int r1, int r2, int r3) { + //kwsys_ios::cerr << "Testing: " << libname << kwsys_ios::endl; kwsys::LibHandle l = kwsys::DynamicLoader::OpenLibrary(libname); // If result is incompatible with expectation just fails (xor): if( (r1 && !l) || (!r1 && l) ) @@ -85,10 +86,10 @@ int main(int , char *[]) res += TestDynamicLoader("libdl.so", "TestDynamicLoader",1,0,1); #endif // Now try on the generated library - //kwsys_stl::string libname = GetLibName("testDynload"); - //res += TestDynamicLoader(libname.c_str(), "dummy",1,0,1); - //res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderFunction",1,1,1); - //res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderData",1,1,1); + kwsys_stl::string libname = GetLibName("testDynload"); + res += TestDynamicLoader(libname.c_str(), "dummy",1,0,1); + res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderFunction",1,1,1); + res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderData",1,1,1); return res; } -- cgit v0.12