小编ain*_*ins的帖子

如何在 Android NDK 中使用 Asio(独立于 Boost)?

Asio(没有 Boost)应该只能用于标题,对吗?

默认情况下,Asio 是一个只有头文件的库。( http://think-async.com )

我知道 Asio 在内部仍然依赖于 Boost。

这是我的设置。

安卓.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE        := gatelib
LOCAL_SRC_FILES     := gatelib.cpp
LOCAL_C_INCLUDES    += /cygdrive/l/asio-1.5.3/include
LOCAL_C_INCLUDES    += /cygdrive/l/boost/boost_1_49_0

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

应用程序.mk

APP_STL := stlport_static
APP_CFLAGS += -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB
Run Code Online (Sandbox Code Playgroud)

门库文件

#include <jni.h>
#include <asio.hpp>

#ifdef __cplusplus
extern "C" 
{
#endif
    // rest of code ...

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

构建脚本

@echo on

@set BASHPATH="L:\cygwin\bin\bash"
@set PROJECTDIR="/cygdrive/l/AsioAndroid/AsioDemo"
@set NDKDIR="/cygdrive/l/android-ndk-r8c/ndk-build"

%BASHPATH% --login -c "cd %PROJECTDIR% && %NDKDIR%

@pause:
Run Code Online (Sandbox Code Playgroud)

输出

http://pastebin.com/XiJjvNmp

所以基本上,我想要实现的是,让 …

c++ android boost-asio android-ndk

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

为什么在C#和C++中输出不同?

在C#中

var buffer = new byte[] {71, 20, 0, 0, 9, 0, 0, 0};

var g = (ulong) ((uint) (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24) |
                    (long) (buffer[4] | buffer[5] << 8 | buffer[6] << 16 | buffer[7] << 24) << 32);
Run Code Online (Sandbox Code Playgroud)

在C++中

#define byte unsigned char
#define uint unsigned int
#define ulong unsigned long long

byte buffer[8] = {71, 20, 0, 0, 9, 0, 0, 0};

ulong g = (ulong) ((uint) (buffer[0] …
Run Code Online (Sandbox Code Playgroud)

c# c++

3
推荐指数
1
解决办法
200
查看次数

在当前进程中获取JavaVM*的所有实例?

这仅适用于Windows.
JNI是否提供任何返回JavaVM*调用进程的所有实例的API ?
考虑以下场景,将C++ dll注入java.exe进程.现在的问题是,C++ DLL如何JavaVM*在其运行的进程中找到当前实例?

据我所知,所有JNI调用API都需要一个JNIEnv只能从JavaVM*右边获取的对象 ?http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

传统的获取方式JavaVM*是通过,JNI_OnLoad但由于我不是在编写一个由Java使用的本机库,所以我认为不会这样做. http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/invocation.html

c++ java windows java-native-interface

3
推荐指数
1
解决办法
3447
查看次数

会不会在动态中反复分配一个char数组导致问题?

C++中的伪代码

char* data = new char[determine_size()];
// ... do some stuff with data
delete[] data;
// ... repeat process
Run Code Online (Sandbox Code Playgroud)

所以基本上,每次都会将数据重复分配给具有不同大小的新数组.虽然每次先前的分配总是先取消分配.

这会导致内存碎片吗?

我对C++中的内存管理不是很熟悉; 我的直觉告诉我这不是一个好主意.

c++ dynamic-arrays dynamic-allocation

0
推荐指数
1
解决办法
129
查看次数

为什么C++没有捕获此异常?

我有以下代码从缓冲区数组中提取字符串.它工作正常.但是,length变量是在运行时确定的,因此如果它超出范围,则会发生异常.当然,可以容易地调整代码以检查长度变量(相对于偏移变量)是否落在边界内.虽然我很好奇为什么以下代码不起作用,因为异常似乎通过try-catch语句(并被调试器捕获).

try
{
    string value(&buffer[offset], length);
    // ...
}
catch (exception& e)
{
    // ...
}
catch (...)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在Windows 7 64bit上运行,MSVCR编译.

c++ exception

0
推荐指数
1
解决办法
1103
查看次数