У меня есть эта функция C внутри dll, которую я вызываю из VB.Net.Почему логическая функция, возвращающая false, возвращает true
код C:
extern "C" {
__declspec(dllexport) bool __stdcall C(bool ret);
}
extern bool __stdcall C(bool ret){
return ret;
}
Вот мой VB.Net код, который вызывает выше:
Imports System.Runtime.InteropServices
Module Module1
<DllImport("foo.dll", CallingConvention:=CallingConvention.StdCall)> _
Private Function C(ByVal param As Boolean) As Boolean
End Function
Sub Main()
System.Console.WriteLine("C(False): {0}", C(False))
System.Console.WriteLine("C(True): {0}", C(True))
End Sub
End Module
Когда я запускаю приведенный выше код, я получаю:
C(False): True
C(True): True
Кажется, мы фактически не возвращаем значение от C()
, но скорее мы возвращаем тот факт, что C()
успешно работает.
Почему C()
всегда возвращается true
? И когда C() не будет успешно работать?
Если у вас есть какая-либо другая информация об этом явлении, пожалуйста, дайте мне свой ответ :) Это все было в моей голове. Приветствия.
Я понятия не имею, что вы просите. Пожалуйста, перефразируйте свой вопрос. Чтобы уточнить, вы проверяете возвращаемое значение функции .. потому что оператор является условным выражением, а значение, которое находится там, - это логическое возвращаемое значение функции. –
Вы указываете, что мы фактически возвращаем значение из C(), которое мы проверяем, успешно ли выполняется C(). ". Это не так, как сказал Саймон. Путаница может исходить из общего соглашения на многих платформах, чтобы вернуть значение, которое будет оцениваться как true, если вызов функции выполняет то, что он должен был делать, и возвращать то, что будет оцениваться как false, если вызов функции завершится неудачно. Значение все еще возвращается, просто значение следует за полезным соглашением. –
Если функция * не работает «успешно», вы узнаете об этом, когда ваша программа поймает исключение или сбой. – paddy