前面的一系列文章中,我介紹了使用 .NET Framework 開發 IADP-Compliant 應用程式的方法,主要使用的語言是 C#,VB.NET 也可以適用,只是語法不同而已。相同的概念一樣可以用在 C/C++ 的程式開發上,雖說是如此,用 C 語言開發卻會比較辛苦一點,因為 C 語言並沒有類別與例外處理 (exception handling) 的概念與語法,只能用傳統的結構化程式設計手法來處理,而 IADP SDK for C 有充份的支援,但寫起來算是比較麻煩那麼一點就是了。
前面的一系列文章中,我介紹了使用 .NET Framework 開發 IADP-Compliant 應用程式的方法,主要使用的語言是 C#,VB.NET 也可以適用,只是語法不同而已。相同的概念一樣可以用在 C/C++ 的程式開發上,雖說是如此,用 C 語言開發卻會比較辛苦一點,因為 C 語言並沒有類別與例外處理 (exception handling) 的概念與語法,只能用傳統的結構化程式設計手法來處理,而 IADP SDK for C 有充份的支援,但寫起來算是比較麻煩那麼一點就是了。
要用 C 語言開發 IADP-Compliant 應用程式,要先下載並安裝 IADP SDK for C,如果有 Visual Studio 2008/2010 的話,也要下載 Visual Studio Plug-in,這樣可以額外得到一些程式碼上的支援,以及必要的標頭檔與靜態連結函式庫 (static linked library) 等,不同的 Visual Studio 版本用的函式庫會有些許不同,如下表:
在使用函式庫前,需要先設定函式庫的路徑指向 IADP SDK 的靜態函式庫路徑 (預設是 PROGRAM_FILES\Intel\AppUp\Cpp\lib),然後在初始化應用程式的入口 (通常是 main 或 WinMain) 加入下列引用標頭檔的指令:
#include "adpcore.h"
接著在程式碼中加入初始化的程式碼:
const ADP_APPLICATIONID myAppID = (0x11111111, 0x111111111, 0x11111111, 0x11111111);
ADP_RET_CODE retcode;
// initialize ADP Library.
retcode = ADP_Initialize();
if (ret_code != ADP_SUCCESS)
{
// handling error.
}
初始化完成後,要取得 Intel AppUp 的授權,就像 C# 的 AdpApplication 類別初始化一樣,但在 C 語言中,要呼叫 ADP_IsAuthorized():
retcode = ADP_IsAuthorized(myAppID);
if (retcode == ADP_AUTHORIZED)
{
// handling authorized process.
}
else
{
// handling unauthorized process.
}
最後,當應用程式結束時,要釋放 ADP_Close() 函式將相關的資源釋放掉:
retcode = ADP_Close();
if (retcode != ADP_SUCCESS)
{
// handling error.
}
看到這裡,大家應該都對 C 開發 IADP-Compliant 應用程式有一個基本的體悟了吧:所有錯誤處理都要用函式呼叫的傳回值來判斷,無法像 C++ 或 C# 這樣直接丟 exception 的 try/catch 作法來簡單的實作。
所有 IADP C Library 中有的函式有:
API Call | Success | Failed |
ADP_Initialize | ADP_SUCCESS | ADP_NOT_AVAILABLE ADP_INCOMPATIBLE_VERSION ADP_TIMEOUT ADP_FAILURE |
ADP_IsAuthorized | ADP_AUTHORIZED ADP_NOT_AUTHORIZED ADP_AUTHORIZATION_EXPIRED |
ADP_NOT_AVAILABLE ADP_NOT_INITIALIZED ADP_TIMEOUT ADP_FAILURE |
ADP_ApplicationBeginEvent | ADP_SUCCESS | ADP_NOT_AVAILABLE ADP_NOT_INITIALIZED ADP_TIMEOUT ADP_FAILURE |
ADP_ApplicationEndEvent | ADP_SUCCESS | ADP_NOT_AVAILABLE ADP_NOT_INITIALIZED ADP_TIMEOUT ADP_FAILURE |
ADP_Close | ADP_SUCCESS | ADP_NOT_AVAILABLE ADP_NOT_INITIALIZED ADP_TIMEOUT ADP_FAILURE |
ADP_CrashReport | ADP_SUCCESS | ADP_NOT_AVAILABLE ADP_NOT_INITIALIZED ADP_TIMEOUT ADP_FAILURE |
其他像是 Instrumentation 以及 Crash Report 等都和 C# 的能力相同,但一樣要透過 C 的語法才能實作,例如下列程式碼是使用 Crash Report 的 C 語言實作:
// Sample crash handler
void SampleCrashHandler(int signal)
{
// API return code
ADP_RET_CODE response;
WCHAR *module = L"AdvancedApp";
unsigned int lineNumber = __LINE__;
WCHAR *message = L"Aborted the operation";
WCHAR *category = L"Critical";
WCHAR *errorData = L"Invalid Parameter";
unsigned long errorDataSize = wcslen(errorData);
errorDataSize = wcslen(errorData);
response = ADP_ReportCrash(module,
lineNumber,
message,
category,
errorData,
errorDataSize,
NULL,
0);
if( response != ADP_SUCCESS )
{
printf("FAIL: ADP_ReportCrash failed with error code%d\n",
response);
}
}
Reference:
Intel AppUp SDK Developer' Guide for C