
# 场景1：初始化
#### 描述
在第三方APP启动时，需要先初始化SDK，才能调用SDK的功能接口，该接口只需调用一次。
#### 业务流程
SDK初始化时，先修改HwmSdk文件夹下HwmSdk.exe文件的名称，再调用Init接口，然后处理回调函数OnInitResult。
1. **修改exe文件名称**
   
   修改HwmSdk文件夹下HwmSdk.exe文件名称为MySdk.exe。
   
   
2. **接口调用**
   
   1. 构建数据结构HwmInitInfo。
      1. 定义派生类demoNotifyProc继承于基类HwmAgentNotify，新建派生类对象。
         ```
         static demoNotifyProc *notifyObj = new demoNotifyProc();
         ```
         
      
      
      
      2. 定义派生类demoCallbackProc继承于基类HwmAgentCallback，新建派生类对象。
         ```
         static demoCallbackProc *callbackObj = new demoCallbackProc();
         ```
         
      
      
      
      3. 构建其他变量。
       
   
   2. 调用Init接口，完成配置初始化，第1步中的数据作为参数。
   
   
   
   
3. **处理回调函数**
   
   处理回调函数OnInitResult。
   
   
 
#### 示例代码
```
/**
*初始化接口，拉起应用
*/
int CdemoBeforeLoginDlg::Init()
{
    //组装入参结构体
    hwmsdkagent::HwmInitInfo initParam;
    memset(&initParam, 0, sizeof(HwmInitInfo));
 
    //(win32平台不需要)x64平台需要设置sdk路径，即exe文件路径，对exe文件重命名后，需要对应修改
    //将路径转换为UTF8格式后拷贝给initParam，此处省略转换代码
    strcpy_s(initParam.exePath, HWM_MAX_FILE_PATH_LEN, GetHwmSdkExePath().c_str());
    //指定日志路径，将路径转换为UTF8格式后拷贝给initParam，此处省略转换代码
    strcpy_s(initParam.logPath, HWM_MAX_FILE_PATH_LEN, GetLogPath().c_str());
    //指定数据路径，将路径转换为UTF8格式后拷贝给initParam，此处省略转换代码
    strcpy_s(initParam.userDataPath, HWM_MAX_FILE_PATH_LEN, GetUserDataPath().c_str());
    strncpy_s(initParam.appId, GetAppId.c_str(), HWM_MAX_APPID_LEN);
    
    initParam.notify = notifyObj;
    initParam.callback = callbackObj;
    initParam.authType = hwmsdkagent::HWM_AUTH_TYPE_APPID;
    int ret = hwmsdkagent::Init(&initParam);
 
    return ret;
}
```
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
exePath参数取值是HwmSdk目录的上级父目录，例如HwmSdk目录是E:\\Hello_World\\debug\\win32\\HwmSdk时，exePath的取值是E:\\Hello_World\\debug\\win32\\。
```
/**
* 初始化回调
*/
void demoCallbackProc::OnInitResult(hwmsdk::HwmErrCode ret, const char* msg, HwmSdkInfo *sdkInfo)
{
    CString codeStr;
    codeStr.Format(_T("%d"), ret);
    string msgStr = CTools::UTF82MultiByte(msg);
    string verStr = "";
    if (sdkInfo != NULL) {
        verStr = CTools::UTF82MultiByte(sdkInfo->version);
    }
    CString tips = _T("OnInitResult code:") + codeStr + _T(", msg:") + CString(msgStr.c_str()) + _T(" version:") + CString(verStr.c_str());
    AfxMessageBox(tips);
 
}
```
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
典型场景和接口参考中的示例代码仅作为示例用的伪代码，不能直接使用。
