Вызывание двух функций с тем же именем от двух различных C DLLs

Прежде всего, ваше get_username_field бесполезно.

В вашем views.py,

class UserPostListView(ListView):
    model = Profile
    template_name = 'website/user_posts.html'
    context_object_name = 'user_content'  
    allow_empty = False  #this will show 404 if the username does not exists

    def get_queryset(self):
        return User.objects.filter(username=self.kwargs['username']) 
        # you can do it in one line now 

Теперь, чтобы показать это в html,

{% for user in user_content %}
{{user.get_full_name}}
# rest of your code
{% endfor %}

Вы также можете показывать сообщения этого конкретного пользователя так же, как и выше. [ 115]

8
задан MichaC 13 November 2008 в 19:15
поделиться

3 ответа

Это раньше было Вами, мог 'переименовать' импортированный символ с помощью компоновщика .def файл. Вы, вероятно, все еще можете, но это было таким длинным, так как .def файлы широко использовались, трудно определить местоположение документации.

Текущая документация MSDN перечисляет директиву ИМПОРТА как 'зарезервированное слово'. Я не уверен, означает ли это, что они удалили функциональность, или если они просто не хотят поддерживать ее больше.

Вот находится на странице, которая описывает директиву ИМПОРТА:

http://www.digitalmars.com/ctg/ctgDefFiles.html#imports

Другие топорные альтернативы:

  1. создайте функции обертки для конфликтующих API. Те функции могут сделать LoadLibrary()/GetProcAddress() танец. Все другие неконфликтующие функции могут быть неявно связаны как нормальные. На самом деле это решение, вероятно, наименее топорно из 3 в этом ответе.

  2. создайте 2 обертки DLLs, таким образом, что каждый связывается только с одним или другой библиотекой с конфликтующими именами. Используйте отличающиеся имена в обертке DLLs, которые просто преобразовывают к реальным библиотекам. Обратите внимание, что библиотеки-оболочки не должны переносить весь API - они просто должны перенести конфликтующие.

4
ответ дан 5 December 2019 в 22:21
поделиться

Вы можете создавать новые файлы библиотеки импорта, которые переименовывают рассматриваемые функции и затем неявно связываются с обоими модулями DLL, пользующимися этими новыми библиотеками импорта. Вот статья Microsoft Knowledge Base, которая описывает процесс: Как Создать 32-разрядные Библиотеки Импорта Без.OBJs или Источника.

1
ответ дан 5 December 2019 в 22:21
поделиться

Мне удалось прибыть в топорный альтернативный № 2 B Mike (или № 3, если Вы считаете исходное предложение) после того, как я поместил немного более мысль в вопрос.

Это - мой фаворит трех для моего конкретного случая, потому что это, кажется, требует наименьшего количества объема работы и могло, вероятно, быть самым очевидным дешифровать кому-то новое рассмотрение кода. Я полагаю, что могу просто выполнить эти шаги и быть в порядке:

  1. используйте некоторое волшебство регулярного выражения и найдите/замените для превращения заголовочных файлов с вызовами функции, которые я имею в заголовочный файл обертки и файл реализации обертки. (где каждый метод в обертке dll дифференцируется некоторым общим новым элементом к имени, экономя мне время в необходимости разобраться в конфликтах), Таким образом, FunctionCall () становится WrapperOneFunctionCall () и WrapperTwoFunctionCall () в каждой соответствующей обертке dll.
  2. свяжите обертку dll с ее соответствующей основой dll.
  3. свяжите мой исполняемый файл с оберткой dlls, удалите ссылки на основу dlls, но все еще включайте константу, перечислимую и определения структуры, которые не должны быть разрешены от основы dll (потому что мои функции обертки все еще берут те же типы параметра),

Если бы чье-либо все еще чтение этого потока мой последующий вопрос было бы: "Есть ли что-то не так с этим решением?"

Спасибо респондентам для их справки.

1
ответ дан 5 December 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: