Используйте это, когда dll выполнило это задание:
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, &__ImageBase, 0, NULL);
// terminate if dll run in a separate thread ExitThread(0);
// or just return out the dll
И __ImageBase - это структура заголовка PE вашей DLL:
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
Позвольте мне начать объяснять это на простом примере, рассмотрим
total = + valFromsp;
, указанная выше строка означает
blockquote>total = total + valFromsp;
, аналогичную этому
total = - + valFromsp
total = - (total + valFromsp);
Теперь вы можете снова расширить это как
total = total - (total + valFromsp)
, рассмотрим пример ниже, который дает тот же результат
blockquote>int total = 10; int val = 50; //total = - + val; //this is also equals to the below line total = total - (total + val); System.out.println(total); //output -50.
Это просто означает следующее:
total = -valFromsp;
Строка кода представляет собой оператор присваивания с выражением в правой части, являющимся + - valFromsp
. Что значит + - valFromsp
? Если мы добавим скобки, он станет +(-(valFromsp))
.
Унарный оператор -
оперирует операндом valFromsp
, делая его -60
. И тогда унарный оператор +
работает на -60
, ничего не делая с ним.
Унарные операторы +
и -
определены в §15.15 спецификации языка Java:
Операторы +, -, ++, - , ~,! и оператор приведения (§15.16) называются унарными операторами.
blockquote>UnaryExpression: PreIncrementExpression PreDecrementExpression + UnaryExpression - UnaryExpression UnaryExpressionNotPlusMinus
Использование унарного оператора
+
дополнительно определено в §15.15.3 :Унарное числовое продвижение ( §5.6.1 ) выполняется на операнде. Тип унарного выражения плюс является продвинутым типом операнда. Результатом унарного выражения плюс является не переменная, а значение, даже если результатом выражения операнда является переменная.
blockquote>Но так как вы используете
int
s, которые не проходят унарное числовое продвижение,+
ничего не делает. Даже если вы используетеbyte
,short
илиchar
,+
все равно ничего не будет делать, потому что унарный оператор-
также продвигает. Так что на самом деле нет никакой причины использовать одновременно+
и-
.Я предлагаю вам просто изменить его на:
total = -valFromsp;
, чтобы избежать путаницы в будущем.