HMODULE является HINSTANCE, базовый адрес модуля. Так, я видел бы, как это работало. Но если все, что Вы хотите, является HMODULE исполняемого файла, почему бы не перечислить весь HMODULE's в процессе (EnumProcessModules). Одному из них свяжут Ваш .lib в.
ограничение, которое я вижу, - то, что Вы понятия не имеете, из которого DLL или EXE прибывает Ваш .lib. Вы могли бы хотеть сравнить HMODULEs (базовые адреса) с _ReturnAddress, который Вы получаете от своего .lib. Ваш .lib будет принадлежать самому высокому меньшему HMODLUE, чем Ваш _ReturnAddress
Я разобрался. Я просто поместил это в эту модель виджета:
def delete(self):
files = WidgetFile.objects.filter(widget=self)
if files:
for file in files:
file.delete()
super(Widget, self).delete()
Это запустило необходимый метод delete () для каждого из связанных объектов, тем самым запустив мой собственный код удаления файла. Да, это более дорогая база данных, но когда вы все равно пытаетесь удалить файлы на жестком диске, это не такие уж большие расходы, чтобы потратить несколько дополнительных раз на БД.
Использование clear ()
перед удалением удаляет все объекты из набора связанных объектов.
см. django-following-Relations-backward
пример:
group.link_set.clear()
group.delete()
Чтобы найти способ обойти эту проблему: предварительное удаление сигнала . (Это никоим образом не означает, что реального решения нет.)
Является ли some_widget_instance
и экземпляром виджета
или WidgetFile
? Потому что, если это экземпляр Widget
, он не получит вашу пользовательскую функцию delete ()
, которая находится в классе WidgetFile
.
Это кажется полным смыслом только в том случае, если один виджет точно подключен к одному файлу WidgetFile. В этом случае вам следует использовать OneToOneField
# Delete the restaurant; the waiter should also be removed
>>> r = Restaurant.objects.get(pk=1)
>>> r.delete()