我有這個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()不能成功運行?
如果您有關於這種現象的任何其他信息,請給我您的答案:)。這是我的頭頂。乾杯。
我不知道你在問什麼。請重新說明你的問題。爲了澄清,您_are_檢查函數的返回值..因爲該語句是一個條件語句,放置在那裏的值是該函數的布爾返回值。 –
您聲明「我們實際返回的是C()的值,我們正在檢查C()是否成功運行。」西蒙說,那不是真的。混淆可能來自許多平臺上的通用慣例,以返回值,如果函數調用完成本應該執行的操作,則返回值爲true;如果函數調用失敗,則返回值爲false的值。值仍然在返回,這只是值遵循一個有用的約定。 –
如果函數*不能*「成功運行」,那麼當程序捕獲異常或崩潰時,您會知道它。 – paddy