/CLRSUPPORTLASTERROR
(保留 PInvoke 呼叫的最後一個錯誤碼)
/CLRSUPPORTLASTERROR
,預設為開啟,會保留透過 P/Invoke 機制呼叫之函式的最後一個錯誤碼,這可讓您從使用 /clr
編譯的程式碼呼叫 DLLS 中的原生函式。
語法
/CLRSUPPORTLASTERROR
/CLRSUPPORTLASTERROR:NO
/CLRSUPPORTLASTERROR:SYSTEMDLL
備註
保留最後一個錯誤碼表示效能降低。 如果您不想產生保留最後一個錯誤碼的效能成本,請使用 /CLRSUPPORTLASTERROR:NO
連結。
您可以連結 至 /CLRSUPPORTLASTERROR:SYSTEMDLL
,以將效能降低到最低,這只會保留系統 DLL 中函式的最後一個錯誤碼。
注意
相同模組中 CLR 程式碼所取用的 Unmanaged 函式不支援保留最後一個錯誤。
- 如需詳細資訊,請參閱
/clr
(Common Language Runtime 編譯) 。
在 Visual Studio 開發環境中設定這個連結器選項
開啟專案的 [ 屬性頁 ] 對話方塊。 如需詳細資訊,請參閱 設定編譯器和建置屬性 。
選取 [組態屬性 > ] 連結器 > [ 進階 ] 屬性頁。
修改 PInvoke 呼叫 屬性的 保留最後一個錯誤碼。 選擇 [確定 ] 或 [ 套用 ] 以儲存您的變更。
若要以程式設計方式設定這個連結器選項
- 請參閱 AdditionalOptions。
範例
下列範例會定義原生 DLL,其中一個匯出的函式會修改最後一個錯誤。
// CLRSUPPORTLASTERROR_dll.cpp
// compile with: /LD
#include <windows.h>
#include <math.h>
#pragma unmanaged
__declspec(dllexport) double MySqrt(__int64 n) {
SetLastError(DWORD(-1));
return sqrt(double(n));
}
下列範例會取用 DLL,示範如何使用 /CLRSUPPORTLASTERROR
。
// CLRSUPPORTLASTERROR_client.cpp
// compile with: /clr CLRSUPPORTLASTERROR_dll.lib /link /clrsupportlasterror:systemdll
// processor: x86
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#include <math.h>
#pragma comment(lib, "wininet.lib")
double MySqrt(__int64 n);
#pragma managed
int main() {
double d = 0.0;
__int64 n = 65;
HANDLE hGroup = NULL;
GROUPID groupID;
DWORD dwSet = 127, dwGet = 37;
SetLastError(dwSet);
d = MySqrt(n);
dwGet = GetLastError();
if (dwGet == DWORD(-1))
printf_s("GetLastError for application call succeeded (%d).\n",
dwGet);
else
printf_s("GetLastError for application call failed (%d).\n",
dwGet);
hGroup = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL,
0, 0, &groupID, 0);
dwGet = GetLastError();
if (dwGet == 183)
printf_s("GetLastError for system call succeeded (%d).\n",
dwGet);
else
printf_s("GetLastError for system call failed (%d).\n",
dwGet);
}
GetLastError for application call failed (127).
GetLastError for system call succeeded (183).
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應