//#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 += ../
#LIBS += D:\Qfile\testDll\libcaffe\Myclassification.dll
# Myclassification.dll \
# zlib.dll\
# szip.dll\
# opencv_videostab2410.dll\
# opencv_video2410.dll\
# opencv_superres2410.dll\
# opencv_stitching2410.dll\
# opencv_photo2410.dll\
# opencv_ocl2410.dll\
# opencv_objdetect2410.dll\
# opencv_nonfree2410.dll\
# opencv_ml2410.dll\
# opencv_legacy2410.dll\
# opencv_imgproc2410.dll\
# opencv_highgui2410.dll\
# opencv_gpu2410.dll\
# opencv_flann2410.dll\
# opencv_ffmpeg2410.dll\
# opencv_features2d2410.dll\
# opencv_core2410.dll\
# opencv_contrib2410.dll\
# opencv_calib3d2410.dll\
# lmdb.dll\
# libquadmath-0.dll\
# libopenblas.dll\
# libglog.dll\
# libgfortran-3.dll\
# libgflags.dll\
# libgcc_s_sjlj-1.dll\
# hdf5_tools.dll\
# hdf5_hl_fortran.dll\
# hdf5_hl_f90cstub.dll\
# hdf5_hl_cpp.dll\
# hdf5_hl.dll\
# hdf5_fortran.dll\
# hdf5_f90cstub.dll\
# hdf5_cpp.dll\
# hdf5.dll\
# gflags.dll
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熱心網友回復:
加載dll成功,獲取dll介面函式成功,呼叫dll函式失敗,那就是呼叫時出了問題,比如傳入引數不正確,引數指向的路徑不存在,引數指向的路徑沒有讀寫權等等;如果確定引數沒錯,那就是dll介面函式內部邏輯有問題,dll介面函式本身測驗過嗎?話說,main改為呼叫test函式,即使用windows標準api能成功嗎?
如果dll是自己寫的,建議先debug dll,看看dll的函式是否有問題。
uj5u.com熱心網友回復:
試試string path = "D:\\Qfile\\build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release\\release\\";
uj5u.com熱心網友回復:
謝謝 版主大大 但是還是不行uj5u.com熱心網友回復:
package com.serve.impl;
import com.serve.CaffeLoader;
import com.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();
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);
} catch (Exception e) {
e.printStackTrace();
}
}
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);
}
}
/*
++++++++++++++++++++++/assets/libcaffe/Myclassification
++++++++++++++++++++++/assets/libcaffe/d.p
++++++++++++++++++++++/assets/libcaffe/r.m
I/System.out: ++++++++++++++++++++++/assets/libcaffe/t.b
++++++++++++++++++++++/assets/libcaffe/w.t
*/
uj5u.com熱心網友回復:
dll使用java可以正常呼叫運行uj5u.com熱心網友回復:
你的意思是用java能調成功,用c就不行,是嗎?如果是這樣,那就是引數的問題,java的String和c的string不一樣的,c的時候,你把引數改成char *試試,即引數改成dploy_path.c_str()之類的試試
uj5u.com熱心網友回復:
嗯 java可以正常呼叫,但是c++不行。 換了還是不行。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
雙反斜杠也都不行uj5u.com熱心網友回復:
函式指標的引數也要改啊,改成char *typedef char* (CALLBACK *p_shibie)(char* deply_path, char* ...)
dll用什么語言開發的,有它的介面函式的原型定義嗎?
uj5u.com熱心網友回復:
dll時用c++寫的,沒有dll的源代碼。改了char*還是運行不了。
uj5u.com熱心網友回復:
Tomcat-start......
libcaffe
++++++++++++++++++++++D:\eclipse-jee-2020-06-R-win32-x86_64\eclipse\libcaffe\Myclassification
OKOK
C:\\Users\\Admin\\Desktop\\img\\1.png
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0825 09:47:17.173537 30032 net.cpp:58] Initializing net from parameters:
name: "CaffeNet"
state {
phase: TEST
level: 0
}
layer {
name: "data"
type: "Input"
top: "data"
input_param {
shape {
dim: 10
dim: 3
dim: 227
dim: 227
}
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 11
stride: 4
}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "conv1"
top: "conv1"
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "norm1"
type: "LRN"
bottom: "pool1"
top: "norm1"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "norm1"
top: "conv2"
convolution_param {
num_output: 256
pad: 2
kernel_size: 5
group: 2
}
}
layer {
name: "relu2"
type: "ReLU"
bottom: "conv2"
top: "conv2"
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "norm2"
type: "LRN"
bottom: "pool2"
top: "norm2"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
layer {
name: "conv3"
type: "Convolution"
bottom: "norm2"
top: "conv3"
convolution_param {
num_output: 384
pad: 1
kernel_size: 3
}
}
layer {
name: "relu3"
type: "ReLU"
bottom: "conv3"
top: "conv3"
}
layer {
name: "conv4"
type: "Convolution"
bottom: "conv3"
top: "conv4"
convolution_param {
num_output: 384
pad: 1
kernel_size: 3
group: 2
}
}
layer {
name: "relu4"
type: "ReLU"
bottom: "conv4"
top: "conv4"
}
layer {
name: "conv5"
type: "Convolution"
bottom: "conv4"
top: "conv5"
convolution_param {
num_output: 256
pad: 1
kernel_size: 3
group: 2
}
}
layer {
name: "relu5"
type: "ReLU"
bottom: "conv5"
top: "conv5"
}
layer {
name: "pool5"
type: "Pooling"
bottom: "conv5"
top: "pool5"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5"
top: "fc6"
inner_product_param {
num_output: 4096
}
}
layer {
name: "relu6"
type: "ReLU"
bottom: "fc6"
top: "fc6"
}
layer {
name: "drop6"
type: "Dropout"
bottom: "fc6"
top: "fc6"
dropout_param {
dropout_ratio: 0.5
}
}
layer {
name: "fc7"
type: "InnerProduct"
bottom: "fc6"
top: "fc7"
inner_product_param {
num_output: 4096
}
}
layer {
name: "relu7"
type: "ReLU"
bottom: "fc7"
top: "fc7"
}
layer {
name: "drop7"
type: "Dropout"
bottom: "fc7"
top: "fc7"
dropout_param {
dropout_ratio: 0.5
}
}
layer {
name: "fc8-re"
type: "InnerProduct"
bottom: "fc7"
top: "fc8-re"
inner_product_param {
num_output: 42
}
}
layer {
name: "prob"
type: "Softmax"
bottom: "fc8-re"
top: "prob"
}
I0825 09:47:17.173537 30032 layer_factory.hpp:77] Creating layer data
I0825 09:47:17.173537 30032 net.cpp:100] Creating Layer data
I0825 09:47:17.173537 30032 net.cpp:418] data -> data
I0825 09:47:17.173537 30032 net.cpp:150] Setting up data
I0825 09:47:17.173537 30032 net.cpp:157] Top shape: 10 3 227 227 (1545870)
I0825 09:47:17.173537 30032 net.cpp:165] Memory required for data: 6183480
I0825 09:47:17.173537 30032 layer_factory.hpp:77] Creating layer conv1
I0825 09:47:17.173537 30032 net.cpp:100] Creating Layer conv1
I0825 09:47:17.173537 30032 net.cpp:444] conv1 <- data
I0825 09:47:17.173537 30032 net.cpp:418] conv1 -> conv1
I0825 09:47:17.173537 30032 net.cpp:150] Setting up conv1
I0825 09:47:17.173537 30032 net.cpp:157] Top shape: 10 96 55 55 (2904000)
I0825 09:47:17.173537 30032 net.cpp:165] Memory required for data: 17799480
I0825 09:47:17.173537 30032 layer_factory.hpp:77] Creating layer relu1
I0825 09:47:17.173537 30032 net.cpp:100] Creating Layer relu1
I0825 09:47:17.173537 30032 net.cpp:444] relu1 <- conv1
I0825 09:47:17.173537 30032 net.cpp:405] relu1 -> conv1 (in-place)
I0825 09:47:17.173537 30032 net.cpp:150] Setting up relu1
I0825 09:47:17.173537 30032 net.cpp:157] Top shape: 10 96 55 55 (2904000)
I0825 09:47:17.173537 30032 net.cpp:165] Memory required for data: 29415480
I0825 09:47:17.173537 30032 layer_factory.hpp:77] Creating layer pool1
I0825 09:47:17.173537 30032 net.cpp:100] Creating Layer pool1
I0825 09:47:17.173537 30032 net.cpp:444] pool1 <- conv1
I0825 09:47:17.173537 30032 net.cpp:418] pool1 -> pool1
I0825 09:47:17.174532 30032 net.cpp:150] Setting up pool1
I0825 09:47:17.174532 30032 net.cpp:157] Top shape: 10 96 27 27 (699840)
I0825 09:47:17.174532 30032 net.cpp:165] Memory required for data: 32214840
I0825 09:47:17.174532 30032 layer_factory.hpp:77] Creating layer norm1
I0825 09:47:17.174532 30032 net.cpp:100] Creating Layer norm1
I0825 09:47:17.174532 30032 net.cpp:444] norm1 <- pool1
I0825 09:47:17.174532 30032 net.cpp:418] norm1 -> norm1
I0825 09:47:17.174532 30032 net.cpp:150] Setting up norm1
I0825 09:47:17.174532 30032 net.cpp:157] Top shape: 10 96 27 27 (699840)
I0825 09:47:17.174532 30032 net.cpp:165] Memory required for data: 35014200
I0825 09:47:17.174532 30032 layer_factory.hpp:77] Creating layer conv2
I0825 09:47:17.174532 30032 net.cpp:100] Creating Layer conv2
I0825 09:47:17.174532 30032 net.cpp:444] conv2 <- norm1
I0825 09:47:17.174532 30032 net.cpp:418] conv2 -> conv2
I0825 09:47:17.174532 30032 net.cpp:150] Setting up conv2
I0825 09:47:17.174532 30032 net.cpp:157] Top shape: 10 256 27 27 (1866240)
I0825 09:47:17.174532 30032 net.cpp:165] Memory required for data: 42479160
I0825 09:47:17.174532 30032 layer_factory.hpp:77] Creating layer relu2
I0825 09:47:17.174532 30032 net.cpp:100] Creating Layer relu2
I0825 09:47:17.174532 30032 net.cpp:444] relu2 <- conv2
I0825 09:47:17.174532 30032 net.cpp:405] relu2 -> conv2 (in-place)
I0825 09:47:17.174532 30032 net.cpp:150] Setting up relu2
I0825 09:47:17.174532 30032 net.cpp:157] Top shape: 10 256 27 27 (1866240)
I0825 09:47:17.174532 30032 net.cpp:165] Memory required for data: 49944120
I0825 09:47:17.174532 30032 layer_factory.hpp:77] Creating layer pool2
I0825 09:47:17.174532 30032 net.cpp:100] Creating Layer pool2
I0825 09:47:17.174532 30032 net.cpp:444] pool2 <- conv2
I0825 09:47:17.174532 30032 net.cpp:418] pool2 -> pool2
I0825 09:47:17.174532 30032 net.cpp:150] Setting up pool2
I0825 09:47:17.174532 30032 net.cpp:157] Top shape: 10 256 13 13 (432640)
I0825 09:47:17.174532 30032 net.cpp:165] Memory required for data: 51674680
I0825 09:47:17.174532 30032 layer_factory.hpp:77] Creating layer norm2
I0825 09:47:17.174532 30032 net.cpp:100] Creating Layer norm2
I0825 09:47:17.174532 30032 net.cpp:444] norm2 <- pool2
I0825 09:47:17.174532 30032 net.cpp:418] norm2 -> norm2
I0825 09:47:17.174532 30032 net.cpp:150] Setting up norm2
I0825 09:47:17.174532 30032 net.cpp:157] Top shape: 10 256 13 13 (432640)
I0825 09:47:17.174532 30032 net.cpp:165] Memory required for data: 53405240
I0825 09:47:17.174532 30032 layer_factory.hpp:77] Creating layer conv3
I0825 09:47:17.174532 30032 net.cpp:100] Creating Layer conv3
I0825 09:47:17.174532 30032 net.cpp:444] conv3 <- norm2
I0825 09:47:17.174532 30032 net.cpp:418] conv3 -> conv3
I0825 09:47:17.176529 30032 net.cpp:150] Setting up conv3
I0825 09:47:17.176529 30032 net.cpp:157] Top shape: 10 384 13 13 (648960)
I0825 09:47:17.176529 30032 net.cpp:165] Memory required for data: 56001080
I0825 09:47:17.176529 30032 layer_factory.hpp:77] Creating layer relu3
I0825 09:47:17.176529 30032 net.cpp:100] Creating Layer relu3
I0825 09:47:17.176529 30032 net.cpp:444] relu3 <- conv3
I0825 09:47:17.176529 30032 net.cpp:405] relu3 -> conv3 (in-place)
I0825 09:47:17.176529 30032 net.cpp:150] Setting up relu3
I0825 09:47:17.176529 30032 net.cpp:157] Top shape: 10 384 13 13 (648960)
I0825 09:47:17.176529 30032 net.cpp:165] Memory required for data: 58596920
I0825 09:47:17.176529 30032 layer_factory.hpp:77] Creating layer conv4
I0825 09:47:17.176529 30032 net.cpp:100] Creating Layer conv4
I0825 09:47:17.176529 30032 net.cpp:444] conv4 <- conv3
I0825 09:47:17.176529 30032 net.cpp:418] conv4 -> conv4
I0825 09:47:17.177525 30032 net.cpp:150] Setting up conv4
I0825 09:47:17.177525 30032 net.cpp:157] Top shape: 10 384 13 13 (648960)
I0825 09:47:17.177525 30032 net.cpp:165] Memory required for data: 61192760
I0825 09:47:17.177525 30032 layer_factory.hpp:77] Creating layer relu4
I0825 09:47:17.177525 30032 net.cpp:100] Creating Layer relu4
I0825 09:47:17.177525 30032 net.cpp:444] relu4 <- conv4
I0825 09:47:17.177525 30032 net.cpp:405] relu4 -> conv4 (in-place)
I0825 09:47:17.177525 30032 net.cpp:150] Setting up relu4
I0825 09:47:17.177525 30032 net.cpp:157] Top shape: 10 384 13 13 (648960)
I0825 09:47:17.177525 30032 net.cpp:165] Memory required for data: 63788600
I0825 09:47:17.177525 30032 layer_factory.hpp:77] Creating layer conv5
I0825 09:47:17.177525 30032 net.cpp:100] Creating Layer conv5
I0825 09:47:17.177525 30032 net.cpp:444] conv5 <- conv4
I0825 09:47:17.177525 30032 net.cpp:418] conv5 -> conv5
I0825 09:47:17.178521 30032 net.cpp:150] Setting up conv5
I0825 09:47:17.178521 30032 net.cpp:157] Top shape: 10 256 13 13 (432640)
I0825 09:47:17.178521 30032 net.cpp:165] Memory required for data: 65519160
I0825 09:47:17.178521 30032 layer_factory.hpp:77] Creating layer relu5
I0825 09:47:17.178521 30032 net.cpp:100] Creating Layer relu5
I0825 09:47:17.178521 30032 net.cpp:444] relu5 <- conv5
I0825 09:47:17.178521 30032 net.cpp:405] relu5 -> conv5 (in-place)
I0825 09:47:17.178521 30032 net.cpp:150] Setting up relu5
I0825 09:47:17.178521 30032 net.cpp:157] Top shape: 10 256 13 13 (432640)
I0825 09:47:17
uj5u.com熱心網友回復:
這是java運行時的列印,也就是呼叫了封裝caffe的AlexNet模型uj5u.com熱心網友回復:
不知道原dll介面函式定義的引數型別,那比較難推測了看你的java代碼,用了GBK,懷疑是編碼問題,估計dll介面函式的引數可能用的是寬字符型別,你改成wchar_t試試,c++的string和wchar_t怎么相互轉換,你自己谷歌一下吧
或者把
string path = "D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/"
之類的改成以下試試
wchar_t *path = L "D:/Qfile/build-testDll-Desktop_Qt_5_14_2_MinGW_32_bit-Release/release/"
callback函式指標定義型別也改成 wchar_t * 試試
windows寬字符參考,每種型別嘗試一下吧
https://docs.microsoft.com/zh-cn/cpp/cpp/char-wchar-t-char16-t-char32-t?view=vs-2019
uj5u.com熱心網友回復:
從你的java代碼反推,shibie是一個jni方法,其原型應該是JNIEXPORT jstring JNICALL shibie(JNIEnv *env, jobject obj, jstring model_file, jstring trained_file, jstring mean_file, jstring label_file, jstring image_file)
其中,JNIEnv是一個結構體,用來呼叫JNI函式的,可以看一下jni.h頭檔案
jstring型別與C++中的string并不等同,需要進行轉換。
詳細的內容,可以搜索JNI相關的文章。
uj5u.com熱心網友回復:
感覺各位的回復,最后我還是放棄了直接使用C++呼叫dll,在qt中可以使用qml呼叫java方法轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9552.html
標籤:C++ 語言
上一篇:VS2013程式框架及運行講解
