主頁 > 移動端開發 > C++/qt呼叫dl報錯

C++/qt呼叫dl報錯

2020-09-11 21:30:20 移動端開發

//#include "widget.h"

#include <QApplication>

#include<QDebug>
#include<QLibrary>
#include<string>
#include<QString>

#include<windows.h>
using std::string;

#include<QProcess>
#include<QStringList>

//typedef std::string ( *shibei)(string, string ,string ,string ,string); //定義函式指標


//typedef QStringList(*FUN1)(QString dll_Name);


typedef string (CALLBACK* p_shibie)(string model_file, string trained_file, string mean_file,
                                                 string label_file, string image_file);

//typedef bool (CALLBACK* SetKeyBoardHook)(HWND);

HINSTANCE hDLL; // Handle to DLL
p_shibie shibiep; // Function pointer
string str;
//string caffe_exe_path= "classification.exe";
//path +
string path  = "D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/";
string caffe_path =  path + "Myclassification.dll";
string deploy_path= path + "d.p";
string model_path= path + "r.m";
string mean_path= path + "t.b";
string words_path= path + "w.t";
string image_path = path + "1.png";


void test2()
{
    //D:/Qfile/testDll/
    QLibrary mylib("Myclassification.dll");
    if(mylib.load())
    {
        qDebug() << "dllhook加載成功";
        shibiep  = (p_shibie)mylib.resolve("shibie");
        if(shibiep)
        {
            qDebug() << "SetKeyBoardHook加載成功";
            str = shibiep(deploy_path, model_path, mean_path, words_path, image_path);
            qDebug()<<"result:"<<QString::fromStdString(str);

            //bool flag = open((HWND)this->winId());
        }
    }

}


void test()
{
        hDLL = LoadLibrary("Myclassification");//"dllhook"為DLL的檔案名
        if(hDLL != NULL)
        {
            qDebug() << "dllhook加載成功";
            //"SetKeyBoardHook"為動態庫里實作的函式名稱
            shibiep = (p_shibie)GetProcAddress(hDLL, "shibie");
            if(shibiep != NULL)
            {
                qDebug() << "SetKeyBoardHook Success";
                str = (shibiep)(deploy_path, model_path, mean_path, words_path, image_path);
                qDebug()<<"result:"<<QString::fromStdString(str);
            }
            else
            {
                //FreeLibrary(hDLL);
                qDebug()<<"SetKeyBoardHook Fail";
                return;
            }
        }
}



int main(int argc, char *argv[])
{
   // QApplication a(argc, argv);

    test2();

   // test();

    //    Widget w;
//    w.show();
   // return a.exec();

}



一直報錯,路徑換成絕對的和相對都不行。
錯誤提示:
dllhook加載成功
SetKeyBoardHook加載成功
*** Check failure stack trace: ***
21:45:57: 程式例外結束。

請教各位大佬如何解決問題?
dll為caffe的執行函式

.pro檔案為:
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES-= UNICODE

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

#LIBS += -L. -lExcelApI

#LIBS += -L. C:/Users/Admin/Downloads/QTDLL/QTDLL/libcaffe/ \
#        -Myclassification \
#        -gflags

#LIBS += -L. -lMyclassification

INCLUDEPATH += D:/Desktop/OpenCV/64/include
LIBS += D:/Desktop/OpenCV/64/mingw/lib/libopencv_*.a


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libcaffe/ -lMyclassification
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libcaffe/ -lMyclassificationd

INCLUDEPATH += $$PWD/libcaffe
DEPENDPATH += $$PWD/libcaffe


LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/gflags.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_cpp.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_f90cstub.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_fortran.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_hl.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_hl_cpp.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_hl_f90cstub.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_hl_fortran.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/hdf5_tools.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/libgcc_s_sjlj-1.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/libgflags.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/libgfortran-3.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/libglog.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/libopenblas.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/libquadmath-0.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/lmdb.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_calib3d2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_contrib2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_core2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_features2d2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_ffmpeg2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_flann2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_gpu2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_highgui2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_imgproc2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_legacy2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_ml2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_nonfree2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_objdetect2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_ocl2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_photo2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_stitching2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_superres2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_video2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/opencv_videostab2410.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/szip.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/zlib.dll
LIBS += D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/lmdb.dll


#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libcaffe/ -llmdb
#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libcaffe/ -llmdbd

#INCLUDEPATH += $$PWD/libcaffe
#DEPENDPATH += $$PWD/libcaffe

謝謝 大佬

uj5u.com熱心網友回復:

dllhook加載成功
SetKeyBoardHook加載成功
*** Check failure stack trace: ***
21:45:57: 程式例外結束。

1、由輸出可以知道是
 str = shibiep(deploy_path, model_path, mean_path, words_path, image_path);
這一句報的錯誤。

2、排查點,一個是確認入參是否都ok?? 另一個就得跟進dll 里面具體分析了  

uj5u.com熱心網友回復:

我覺得你絕對路徑都有問題的話,就應該去檢查一下你的匹配情況了,是否32位,64位不匹配,是否minW和visual studio版本不匹配。用mingW編譯的和用vs編譯的混用有問題。64位去呼叫32位的dll也會有問題

uj5u.com熱心網友回復:

32位和64位都編譯了試過不行,但是java代碼運行了可以成功呼叫。 
路徑換了/、\\、\\\\都還是不行。

主要是沒有dll的源代碼,因此不能追進去調式。

uj5u.com熱心網友回復:

package com.cizon.tec.serve.impl;


import com.cizon.tec.serve.CaffeLoader;
import com.cizon.tec.serve.DistinguishServe;
import com.sun.jna.Library;
import com.sun.jna.Native;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;


public class CaffeServeImpl implements DistinguishServe {
     String caffe_exe_path= "classification.exe";
     String caffe_path="Myclassification";
     String deploy_path= "d.p";
     String model_path= "r.m";
     String mean_path= "t.b";
     String words_path= "w.t";
    classficationdll Instance=null;
    public CaffeServeImpl(String path){
        caffe_exe_path=path+File.separator+caffe_exe_path;
        caffe_path=path+File.separator+caffe_path;
        deploy_path=path+File.separator+deploy_path;
        model_path=path+File.separator+model_path;
        mean_path=path+File.separator+mean_path;
        words_path=path+File.separator+words_path;
        System.out.println(caffe_path);
        Instance = (classficationdll) Native.loadLibrary(caffe_path, classficationdll.class);
    }
    public CaffeServeImpl(){
        try {
            String path= CaffeLoader.initialize();
            System.out.println(path);
            path=new File(path).getAbsolutePath();
            caffe_exe_path=path+File.separator+caffe_exe_path;
            caffe_path=path+File.separator+caffe_path;
            deploy_path=path+File.separator+deploy_path;
            model_path=path+File.separator+model_path;
            mean_path=path+File.separator+mean_path;
            words_path=path+File.separator+words_path;
            System.out.println("++++++++++++++++++++++"+caffe_path);
            Instance = (classficationdll) Native.loadLibrary(caffe_path, classficationdll.class);
            System.out.println("OKOK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public  String exeCmd(String commandStr) {
        BufferedReader br = null;
        try {
            commandStr=caffe_exe_path+" "+deploy_path+" "+model_path+" "+mean_path+" "+words_path+" "+commandStr;
            System.out.println(commandStr);
            Process p = Runtime.getRuntime().exec(commandStr);
            br = new BufferedReader(new InputStreamReader(p.getInputStream(),Charset.forName(System.getProperty("file.encoding"))));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally
        {
            if (br != null)
            {
                try {
                    br.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return "";
    }

    public interface classficationdll extends Library {
        String shibie(String model_file, String trained_file, String mean_file, String label_file, String image_file);
    }

    @Override
    public String distinguish(String path) {
        System.setProperty("jna.encoding","GBK");
        //return exeCmd(path);
      return Instance.shibie(deploy_path,model_path,mean_path,words_path,path);
    }

}

這是java呼叫

uj5u.com熱心網友回復:

你確定你函式的引數是對的?
java的string照理對應的C的引數是const char*而不是std::string

uj5u.com熱心網友回復:

之前,遇到引數是公共型別,比如是 CString、std::string 的,我就很怕,所以一直避免.
因為不同版本的 VC運行時,std::string 可能不同,debug /release 編譯出來的同樣是二進制邊界不同。(也許有相同的,但我沒精力一個一個證明或者證偽,所以極力避開,都用 char* 傳入,或者自寫的類物件指標用來帶回字串或者復雜型別 ,   還有就是 統一所有開發環境)

而你要作 hook ,那可能那個東西不知道誰、用啥寫的,以及怎么編譯的。。。。

說白了,以這個函式原型,用 VS2010撰寫的dll ,同樣要用 VS2010撰寫的.exe/.dll 去呼叫。debug撰寫的dll,也要用debug撰寫的.exe/.dll去呼叫。這樣肯定沒問題,這樣出問題也是其他原因導致的。

如果沒這個問題,就當我路過。。。

uj5u.com熱心網友回復:

感覺各位的回復,最后我還是放棄了直接使用C++呼叫dll,在qt中可以使用qml呼叫java方法

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/7729.html

標籤:Qt

上一篇:Android如何實作多級通訊樹

下一篇:Android 仿今日頭條

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more