2013-04-01 7 views
3

Существует ли стандартная или обычная схема URI, например file: или http: для ссылки на объекты в динамической библиотеке?Существует ли обычная схема URI для ссылки на код в библиотеке?

Например, если бы я представлял функцию в библиотеке в виде уникальной строки, которая может использоваться для поиска этой функции (каким бы отражающим образом она не была), как я могу это сделать?

В частности, я разрабатываю это в Objective-C, и я предполагаю, что разные языки/платформы будут иметь разные представления (я знаю, что .NET имеет свои собственные), но мне это интересно в более общем смысле.

ответ

1

Нет, имя символа происходит от его имени в коде. В окнах вы принимаете C или C++

HMODULE module=LoadLibrary([path to your dll]); 
//If the exported name is foo. 
Function foo=(Function)GetProcAddress(module,"foo"); 
//Call function 
foo(); 
FreeLibrary(module); 

Экспортное имя зависит от компилятора.

На самом деле такая схема именования совершенно бесполезна. В C++ вы можете использовать что-то вроде (Обратите внимание, что у вас будет один FunctionCaller за прототип функции)

FunctionCaller("your-dll.dll/foo")(); 

Где конструктор FunctionCaller загружает библиотеку, вызывает Foo и освобождает библиотеку. Однако это не хорошо, потому что:

  • может случиться так, что точки возвращаемого значения ресурса внутри библиотеки, а затем станет бесполезным

  • загрузки библиотеки и выполнять функцию просмотровые медленно по сравнению с Вызов функции найдено

Что вы делаете

  1. нагрузки библиотека

  2. функции нагрузки, что вам нужно

  3. Используйте свои функции

  4. Бесплатная библиотека

Здесь вам нужно будет обратиться к более чем одного символа в время, которое потребует более сложной схемы, чем uri.

EDIT: Если вы хотите, чтобы функция вызова вызывала такие функции, вы могли бы иметь выживший объект FunctionCaller, который хранит все загруженные модули и содержит карту из имени функции для адреса для каждой загруженной библиотеки.