git-svn-id: https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/library/cURL@75972 8089f293-4706-0410-a29e-feb5c42a2edf
116 lines
3.3 KiB
Plaintext
116 lines
3.3 KiB
Plaintext
indexing
|
|
description: "[
|
|
Dynamic load a external API which exists in a dll or so.
|
|
Benefit is we can still use our executables even without the dll/so files.
|
|
]"
|
|
status: "See notice at end of class."
|
|
legal: "See notice at end of class."
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
class
|
|
API_LOADER
|
|
|
|
feature -- Query
|
|
|
|
safe_load_api (a_module_name: STRING; a_api_name: STRING): POINTER is
|
|
-- Safe loading `a_api_name' in `a_module_name' if possible.
|
|
-- `a_module_name' is case sensitive.
|
|
require
|
|
not_void: a_module_name /= Void and then not a_module_name.is_empty
|
|
not_void: a_api_name /= Void and then not a_api_name.is_empty
|
|
local
|
|
l_module: POINTER
|
|
do
|
|
l_module := module_pointer (a_module_name)
|
|
if l_module /= default_pointer then
|
|
Result := api_pointer (l_module, a_api_name)
|
|
end
|
|
end
|
|
|
|
module_pointer (a_name: STRING): POINTER is
|
|
-- Find module hanle with `a_name'
|
|
-- Result is void if not exists
|
|
require
|
|
not_void: a_name /= Void
|
|
do
|
|
if loaded_modules.has_key (a_name) then
|
|
Result := loaded_modules.item (a_name)
|
|
else
|
|
Result := implementation.load_module (a_name)
|
|
if Result /= default_pointer then
|
|
loaded_modules.extend (Result, a_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
api_pointer (a_module: POINTER; a_name: STRING): POINTER is
|
|
-- Find API pointer which name is `a_name' in `a_module'
|
|
-- Result is void if not exists.
|
|
require
|
|
exists: a_module /= default_pointer
|
|
not_void: a_name /= Void
|
|
do
|
|
if loaded_apis.has (a_name) then
|
|
Result := loaded_apis.item (a_name)
|
|
else
|
|
Result := implementation.loal_api (a_module, a_name)
|
|
if Result /= default_pointer then
|
|
loaded_apis.extend (Result, a_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
feature {NONE} -- Implementation
|
|
|
|
loaded_modules: HASH_TABLE [POINTER, STRING] is
|
|
-- Loaded modules
|
|
once
|
|
create Result.make (1)
|
|
end
|
|
|
|
loaded_apis: HASH_TABLE [POINTER, STRING] is
|
|
-- Loaded apis.
|
|
once
|
|
create Result.make (10)
|
|
end
|
|
|
|
implementation: API_LOADER_IMP is
|
|
-- Native loader
|
|
once
|
|
create Result
|
|
end
|
|
indexing
|
|
copyright: "Copyright (c) 1984-2007, Eiffel Software"
|
|
license: "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)"
|
|
licensing_options: "http://www.eiffel.com/licensing"
|
|
copying: "[
|
|
This file is part of Eiffel Software's Eiffel Development Environment.
|
|
|
|
Eiffel Software's Eiffel Development Environment is free
|
|
software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published
|
|
by the Free Software Foundation, version 2 of the License
|
|
(available at the URL listed under "license" above).
|
|
|
|
Eiffel Software's Eiffel Development Environment is
|
|
distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty
|
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public
|
|
License along with Eiffel Software's Eiffel Development
|
|
Environment; if not, write to the Free Software Foundation,
|
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
]"
|
|
source: "[
|
|
Eiffel Software
|
|
356 Storke Road, Goleta, CA 93117 USA
|
|
Telephone 805-685-1006, Fax 805-685-6869
|
|
Website http://www.eiffel.com
|
|
Customer support http://support.eiffel.com
|
|
]"
|
|
|
|
end
|