小编Rah*_*aik的帖子

如何使用NDK中的Asset Manager API读取原始数据?

我将着色器保存在资产文件夹中。着色器的名称(文件名):“vertex.vs”路径:assets/shaders/vertex.vs

我想从 NDK 的 C++ 文件访问此文件,而不调用 Java 或 JNI,无论它是什么。通过阅读各种资源,我设法理解我必须使用标题

#include <android/asset_manager.h>
Run Code Online (Sandbox Code Playgroud)

之后,我创建指针并打开它。

const char* mPath = "shaders/vertex.vs";
AAssetManager* mAssetManager;
AAsset* mAsset;
mAsset = AAssetManager_open(mAssetManager, mPath,AASSET_MODE_UNKNOWN);
int foo = AAsset_getLength(mAsset);
LOGD( "This is a number: %d", foo );
AAsset_close(mAsset);
Run Code Online (Sandbox Code Playgroud)

但它没有任何作用。这个读取功能是怎么回事。

AAsset_read(mAsset,pBuffer,bytesToRead);
Run Code Online (Sandbox Code Playgroud)

数据读取到哪里了?如何定义pBuffer?有人可以分享一个关于如何从原始文件读取数据以及如何访问它的简单示例(例如在 logcat 中显示它)吗?

buffer android-ndk android-assetmanager

6
推荐指数
1
解决办法
7466
查看次数

为什么成员函数指针没有被相应的成员正确访问?

请考虑此代码段.

class B {
public:
    void up() {
        std::cout << "up" << std::endl;
    }
    void down() {
        std::cout << "down" << std::endl;
    }
    void init( void(B::*someFunc)() , void(B::*otherFunc)() ) {
        m_execute = someFunc;
        B* newB = new B();
        m_b = newB;
        m_b->m_execute = otherFunc;
    }

    void find() {
        (this->*m_execute)();
        (m_b->*m_execute)();
    }
private:
    void(B::*m_execute)();
    B* m_b;
};

int main(){
    B* b = new B();
    b->init(&B::up,&B::down);
    b->find();
}
Run Code Online (Sandbox Code Playgroud)

我有一个B类.它的私有成员是指向B即m_b和函数指针的指针.在init()函数中,私有成员函数指针被赋予up()并且私有成员m_b的函数指针被给出down()当我运行代码时,B :: up()被执行两次而不是执行B :: up ()然后B :: down().

c++ function-pointers

4
推荐指数
1
解决办法
131
查看次数