#pragma once
|
#include "pch.h"
|
#include "stdafx.h"
|
#include "Python.h"
|
#include <string>
|
#include <cstdarg>
|
|
//#include "md5file.h"
|
//#pragma warning (disable : 4996)
|
//#include <iostream>
|
//#include <fstream>
|
//#include "shlobj.h"
|
//#include "atlstr.h"
|
//#include <windows.h>
|
//#include "stdio.h"
|
//
|
//#include "md5global.h"
|
//#include "md5.h"
|
//#include <fstream>
|
//#include <sstream>
|
//#include <memory>
|
//#include <iomanip>
|
//#include <exception>
|
|
using namespace std;
|
|
#ifdef PYUTILS_EXPORTS
|
#define PYUTILS_API __declspec(dllexport)
|
#else
|
#define PYUTILS_API __declspec(dllimport)
|
#endif
|
|
extern "C" PYUTILS_API PyObject * create_py_module(string module_name);
|
|
|
extern "C" PYUTILS_API int py_initialize();
|
|
extern "C" PYUTILS_API int py_finalize();
|
|
|
extern "C" PYUTILS_API int py_isInitialized();
|
|
|
//template <typename T> T* create_sarr_ptr(int size) {
|
// T* result = new T[size];
|
// return result;
|
//}
|
///*
|
//@brief ´´½¨¶þάָÕë
|
//*/
|
//template <typename T> T** create_darr_ptr(int row_size, int col_size) {
|
// T** darray = new T *[row_size];
|
// for (size_t i = 0; i < row_size; i++) {
|
// darray[i] = new T[col_size];
|
// }
|
// return darray;
|
//}
|
///*
|
//´´½¨¶þάָÕëÓÃÓÚc#µ½cPPµÄ²ÎÊý´«µÝ
|
//*/
|
//template <typename T> T* create_darr2_ptr(int row_size, int col_size) {
|
// T* darray2 = new T[row_size*col_size];
|
// return darray2;
|
//}
|
//
|
///*
|
//@brief µ¥Êý×é½á¹¹Ì壬Á½ÖÖ³õʼ»¯·½·¨£¬´ø²Î·½·¨ÒÑ¿ª±ÙÄÚ´æ¿Õ¼ä
|
//*/
|
//template <typename T> struct sarr {
|
// T* head;
|
// int size;
|
// sarr(int size) {
|
// this->size = size;
|
// this->head = create_sarr_ptr<T>(size);
|
// };
|
// sarr() { this->size = 1; this->head = create_sarr_ptr<T>(1); };
|
// sarr(const sarr<T>* data) {
|
// T* new_ptr = create_sarr_ptr<T>(data->size);
|
// for (int i = 0; i < data->size; i++) {
|
// new_ptr[i] = data->head[i];
|
// }
|
// this->head = new_ptr;
|
// this->size = data->size;
|
// };
|
// /*
|
// ʹÓõȺŸ³ÖµÊ±±ØÐ붼ÊǽṹÌåÖ¸Õ룬Æä´Î£¬*sarr1=sarr2£»
|
// */
|
// void operator=(const sarr<T>* data) {
|
// if (this != data) {
|
// if (this->head != NULL) {
|
// delete[] this->head;
|
// this->head = NULL;
|
// }
|
// T* new_ptr = create_sarr_ptr<T>(data->size);
|
// for (int i = 0; i < data->size; i++) {
|
// new_ptr[i] = data->head[i];
|
// }
|
// this->head = new_ptr;
|
// this->size = data->size;
|
// }
|
// };
|
// ~sarr() {
|
// delete[] head;
|
// head = NULL;
|
// }
|
//};
|
///*
|
//¶þάÊý×é½á¹¹Ì壬ÓÃÓÚһάÐÎʽµÄ´æ´¢£¨C#¡ª>C++£©
|
//*/
|
//template <typename T> struct darr2 {
|
// T* head;
|
// int row_size;
|
// int col_size;
|
// darr2(int row, int col) {
|
// this->col_size = col;
|
// this->row_size = row;
|
// this->head = create_darr2_ptr<T>(row, col);
|
// };
|
// darr2(const darr2<T>*data) {
|
//
|
// T* new_ptr = create_darr2_ptr<T>(data->row_size, data->col_size);
|
// for (int i = 0; i < data->row_size*data->col_size; i++)
|
// {
|
// new_ptr[i] = data->head[i];
|
// }
|
// this->head = new_ptr;
|
// this->row_size = data->row_size;
|
// this->col_size = data->col_size;
|
// };
|
//};
|
//
|
///*
|
//@brief ¶þάÊý×é½á¹¹Ì壬Á½ÖÖ³õʼ»¯·½·¨£¬´ø²Î·½·¨ÒÑ¿ª±ÙÄÚ´æ¿Õ¼ä
|
//*/
|
//template <typename T> struct darr {
|
// T** head;
|
// int row_size;
|
// int col_size;
|
// darr(int row, int col) {
|
// this->col_size = col;
|
// this->row_size = row;
|
// this->head = create_darr_ptr<T>(row, col);
|
// };
|
// darr(const darr<T>* data) {
|
// T** new_ptr = create_darr_ptr<T>(data->row_size, data->col_size);
|
// for (int i = 0; i < data->row_size; i++) {
|
// for (int j = 0; j < data->col_size; j++) {
|
// new_ptr[i][j] = data->head[i][j];
|
// }
|
// }
|
// this->head = new_ptr;
|
// this->row_size = data->row_size;
|
// this->col_size = data->col_size;
|
// };
|
// darr(const darr2<T>* data) {
|
// int row = data->row_size;
|
// int col = data->col_size;
|
// T** new_ptr = create_darr_ptr<T>(row, col);
|
// for (size_t i = 0; i < row; i++)
|
// {
|
// memcpy(new_ptr[i], data->head + i * col, col * sizeof(T));
|
// }
|
// this->head = new_ptr;
|
// this->row_size = data->row_size;
|
// this->col_size = data->col_size;
|
// }
|
// void operator=(const darr<T>* data) {
|
// if (this != data) {
|
//
|
// if (this->head != NULL) {
|
// for (int i = 0; i < this->row_size; i++) {
|
// delete[] this->head[i];
|
// }
|
// this->head = NULL;
|
// }
|
// T** new_ptr = create_darr_ptr<T>(data->row_size, data->col_size);
|
// for (int i = 0; i < data->row_size; i++) {
|
// for (int j = 0; j < data->col_size; j++) {
|
// new_ptr[i][j] = data->head[i][j];
|
// }
|
// }
|
// this->head = new_ptr;
|
// this->row_size = data->row_size;
|
// this->col_size = data->col_size;
|
// }
|
// };
|
// darr() { this->col_size = 1; this->row_size = 1; this->head = create_darr_ptr<T>(1, 1); };
|
// ~darr() {
|
// for (int i = 0; i < row_size; i++) {
|
// delete[] this->head[i];
|
// }
|
// this->head = NULL;
|
// }
|
//};
|
|
/*
|
ÒÔÏÂΪȫ¾ÖÏß³ÌËøʵÏÖÐÂÔö²¿·Ö
|
*/
|
|
|
|
/*
|
ÒÔÏÂΪÐÂÔöУÑéÂ벿·Ö
|
*/
|
//int write_string_to_file_append(const string & file_string, const string str)
|
//{
|
// std::ofstream OsWrite(file_string, std::ofstream::app);
|
// OsWrite << str;
|
// OsWrite << std::endl;
|
// OsWrite.close();
|
// return 0;
|
//}
|
//string getCode() {
|
// HKEY tempKey; //¾ä±ú
|
// // DWORD dwLength = 256*sizeof(TCHAR);
|
// DWORD dwType = REG_SZ; //Êý¾Ý¸ñʽ
|
// TCHAR lpstrReturn[256];//·¾¶»º´æ
|
// TCHAR lpstrReturn2[256];//·¾¶»º´æ
|
// DWORD dwLength = 256 * sizeof(TCHAR); //·¾¶»º´æ´óС
|
// DWORD dwLength2 = 256 * sizeof(TCHAR); //·¾¶»º´æ´óС
|
// //²Ù×÷×¢²á±í
|
// RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Cryptography", 0, KEY_READ, &tempKey);
|
// RegQueryValueEx(tempKey, _T("MachineGuid"), NULL, &dwType, (LPBYTE)&lpstrReturn, &dwLength);
|
// RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\HardWareConfig", 0, KEY_READ, &tempKey);
|
// RegQueryValueEx(tempKey, _T("LastConfig"), NULL, &dwType, (LPBYTE)&lpstrReturn2, &dwLength2);
|
// string machineGuid(lpstrReturn);
|
// string lastConfig(lpstrReturn2);
|
// //½ØÈ¡
|
// string code1(machineGuid.substr(0, 13));
|
// string code2(lastConfig.substr(14, 6));
|
// string code3(lastConfig.substr(20, 17));
|
// //string code4(machineGuid.substr(0, 4));
|
// string finalCode = code1 + code2 + code3;
|
// //finalCode.push_back('}');
|
// //cout << finalCode << endl;
|
// //fprintf('C:\\Users\\10951\\Desktop\\code.txt,&finalCode');
|
// return finalCode;
|
//}
|
//std::string getFileMD5(const std::string& filename)
|
//{
|
// std::ifstream fin(filename.c_str(), std::ifstream::in | std::ifstream::binary);
|
// if (fin)
|
// {
|
// MD5_CTX context;
|
// MD5Init(&context);
|
//
|
// fin.seekg(0, fin.end);
|
// const auto fileLength = fin.tellg();
|
// fin.seekg(0, fin.beg);
|
//
|
// const int bufferLen = 8192;
|
// std::unique_ptr<unsigned char[]> buffer{ new unsigned char[bufferLen] {} };
|
// unsigned long long totalReadCount = 0;
|
// decltype(fin.gcount()) readCount = 0;
|
// // ¶ÁÈ¡ÎļþÄÚÈÝ£¬µ÷ÓÃMD5Update()¸üÐÂMD5Öµ
|
// while (fin.read(reinterpret_cast<char*>(buffer.get()), bufferLen))
|
// {
|
// readCount = fin.gcount();
|
// totalReadCount += readCount;
|
// MD5Update(&context, buffer.get(), static_cast<unsigned int>(readCount));
|
// }
|
// // ´¦Àí×îºóÒ»´Î¶Áµ½µÄÊý¾Ý
|
// readCount = fin.gcount();
|
// if (readCount > 0)
|
// {
|
// totalReadCount += readCount;
|
// MD5Update(&context, buffer.get(), static_cast<unsigned int>(readCount));
|
// }
|
// fin.close();
|
//
|
// // Êý¾ÝÍêÕûÐÔ¼ì²é
|
// if (totalReadCount != fileLength)
|
// {
|
// std::ostringstream oss;
|
// oss << "FATAL ERROR: read " << filename << " failed!" << std::ends;
|
// throw std::runtime_error(oss.str());
|
// }
|
//
|
// unsigned char digest[16];
|
// MD5Final(digest, &context);
|
//
|
// // »ñÈ¡MD5
|
// std::ostringstream oss;
|
// for (int i = 0; i < 16; ++i)
|
// {
|
// oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned int>(digest[i]);
|
// }
|
// oss << std::ends;
|
//
|
// return std::move(oss.str());
|
// }
|
// else
|
// {
|
// std::ostringstream oss;
|
// oss << "FATAL ERROR: " << filename << " can't be opened" << std::ends;
|
// throw std::runtime_error(oss.str());
|
// }
|
//}
|
//inline int checkCode() {
|
// TCHAR path[256];
|
// //»ñÈ¡Óû§×ÀÃæµØÖ·
|
// SHGetSpecialFolderPath(0, _T(path), CSIDL_DESKTOPDIRECTORY, 0);
|
// string folderPath(path);
|
// string tempFolderPath1 = folderPath + "\\code_temp.txt";
|
// string code = getCode();
|
// write_string_to_file_append(tempFolderPath1, string(code));
|
// string mD5Code = getFileMD5(tempFolderPath1);
|
// write_string_to_file_append(string(folderPath + "\\code_check.txt"), string(mD5Code));//ɾ³ýÕâ¾ä»°
|
// remove(data(tempFolderPath1));
|
//
|
// //´ÓtxtÌáÈ¡×Ö·û´®
|
// string s; //ÿ´Î¶ÁÈ¡Ò»ÐÐtxtÎļþ·µ»ØµÄ×Ö·û´®
|
// //¶ÁÈ¡Ò»txtÎļþ
|
// ifstream infile;
|
// infile.open(string(folderPath + "\\code_check.txt"));
|
// while (getline(infile, s))
|
// {
|
// //У¶Ô
|
// //cout << s << endl;
|
// break;
|
// }
|
// int resultEnv = s.compare(mD5Code);
|
// cout << resultEnv << endl;
|
// infile.close(); //¹Ø±ÕÎļþ
|
// return resultEnv;
|
//}
|
|
|
/*
|
@brief ¸ù¾Ý´«ÈëµÄcppÊý×éת³ÉpythonÊý×é
|
@param data£ºstruct sarr/darr
|
*/
|
//inline PyObject* parseCppData(int data) { return Py_BuildValue("i", data); }
|
//inline PyObject* parseCppData(float data) { return Py_BuildValue("f", data); }
|
//inline PyObject* parseCppData(double data) { return Py_BuildValue("d", data); }
|
//inline PyObject* parseCppData(string data) { return Py_BuildValue("s", data.c_str()); }
|
//inline PyObject* parseCppData(char* data) { string s(data); return Py_BuildValue("s", s.c_str()); }
|
//inline PyObject* parseCppData(const char* data) { return Py_BuildValue("s", data); }
|
//template <typename T> PyObject* parseCppData(T* data, int size) {
|
// PyObject* pylist = PyList_New(size);
|
// PyObject* pylist_i = NULL;
|
// for (int i = 0; i < size; i++) {
|
// pylist_i = parseCppData(*(data + i));
|
// PyList_SetItem(pylist, i, pylist_i);
|
// }
|
// return pylist;
|
//}
|
//template <typename T> PyObject* parseCppData(T** data, int row, int col) {
|
// PyObject* pylist = PyList_New(row);
|
// PyObject* pylist_i = NULL;
|
// for (int i = 0; i < row; i++) {
|
// pylist_i = parseCppData(*(data + i), col);
|
// PyList_SetItem(pylist, i, pylist_i);
|
// }
|
// return pylist;
|
//}
|
//
|
//template <typename T> PyObject* parseCppData(sarr<T>* data) {
|
// return parseCppData(data->head, data->size);
|
//}
|
//template <typename T> PyObject* parseCppData(darr<T>* data) {
|
// return parseCppData(data->head, data->row_size, data->col_size);
|
//}
|
|
|
/*
|
@brief ¸ù¾Ý´«ÈëµÄcppÊý×éת³ÉpythonÊý×é
|
@param data£ºstruct sarr/darr
|
@param pydata: PyList
|
*/
|
//inline void parsePyData(int& res, PyObject* pydata) { PyArg_Parse(pydata, "i", &res); }
|
//inline void parsePyData(float& res, PyObject* pydata) { PyArg_Parse(pydata, "f", &res); }
|
//inline void parsePyData(double& res, PyObject* pydata) { float f = 0.0; PyArg_Parse(pydata, "f", &f); res = (double)f; }
|
//inline void parsePyData(string& res, PyObject* pydata) { char* s; PyArg_Parse(pydata, "s", &s); res = s; }
|
//
|
//template <typename T> void parsePyData(T* data, PyObject* pydata, int size) {
|
//
|
// for (int i = 0; i < size; i++) {
|
// parsePyData(*(data + i), PyList_GetItem(pydata, i));
|
// }
|
//}
|
//template <typename T> void parsePyData(T** data, PyObject* pydata, int row_size, int col_size) {
|
// for (int i = 0; i < row_size; i++) {
|
// parsePyData(*(data + i), PyList_GetItem(pydata, i), col_size);
|
// }
|
//}
|
//template <typename T> void parsePyData(sarr<T>* data, PyObject* pydata) {
|
// parsePyData(data->head, pydata, data->size);
|
//}
|
//template <typename T> void parsePyData(darr<T>* data, PyObject* pydata) {
|
// parsePyData(data->head, pydata, data->row_size, data->col_size);
|
//}
|
//
|
//
|
///*
|
//@brief ¸ù¾Ý´«ÈëµÄcppÊý×éת³ÉpythonÊý×é
|
//@param data£ºstruct sarr/darr
|
//@param pytuple: PyTuple
|
//@param index: tuple챐
|
//*/
|
//template<typename T>void parsePyTuple(T& data, PyObject* pytuple, int index) {
|
// parsePyData(data, PyTuple_GetItem(pytuple, index));
|
//}
|
//
|
//template<typename T>void parsePyTuple(sarr<T>* data, PyObject* pytuple, int index) {
|
// parsePyData(data, PyTuple_GetItem(pytuple, index));
|
//}
|
//template<typename T>void parsePyTuple(darr<T>* data, PyObject* pytuple, int index) {
|
// parsePyData(data, PyTuple_GetItem(pytuple, index));
|
//}
|
//
|
///*
|
//¶þάÊý×é´æ´¢·½Ê½×ª±ä£¬darrת³Édarr2£¬ÓÃÓÚjni½«´Ójava½ÓÊյĶþλÊý×éת»»³ÉC++½ÓÊÕµÄdarr2
|
//*/
|
//template <typename T> darr2<T>* convert_darr2_from_darr(darr<T>* data) {
|
// int row = data->row_size;
|
// int col = data->col_size;
|
// T* new_ptr = create_darr2_ptr<T>(row, col);
|
// darr2<T>* result = new darr2<T>(row, col);
|
// for (size_t i = 0; i < row; i++)
|
// {
|
// memcpy(new_ptr + i * col, data->head[i], col * sizeof(double));
|
// }
|
// result->head = new_ptr;
|
// result->row_size = row;
|
// result->col_size = col;
|
//
|
// return result;
|
//}
|
///*
|
//intÐÍdarr2
|
//*/
|
//template <typename T> darr2<T>* convert_darr2_from_darr_int(darr<T>* data) {
|
// int row = data->row_size;
|
// int col = data->col_size;
|
// T* new_ptr = create_darr2_ptr<T>(row, col);
|
// darr2<T>* result = new darr2<T>(row, col);
|
// for (size_t i = 0; i < row; i++)
|
// {
|
// memcpy(new_ptr + i * col, data->head[i], col * sizeof(int));
|
// }
|
// result->head = new_ptr;
|
// result->row_size = row;
|
// result->col_size = col;
|
//
|
// return result;
|
//}
|
///*
|
//sarrת»¯Îªdarr2,ÓÃÓÚjni½«´Ójava½ÓÊÕµÄһάÊý×éת»»³ÉC++½ÓÊÕµÄdarr2
|
//*/
|
//template <typename T> darr2<T>* convert_darr2_from_sarr(sarr<T>* data) {
|
// int row = data->size;
|
// int col = 1;
|
// T* new_ptr = create_darr2_ptr<T>(row, col);
|
// darr2<T>* result = new darr2<T>(row, col);
|
// for (size_t i = 0; i < row; i++)
|
// {
|
// memcpy(new_ptr + i * col, data->head + i*col, col * sizeof(double));
|
// }
|
// result->head = new_ptr;
|
// result->row_size = row;
|
// result->col_size = col;
|
//
|
// return result;
|
//}
|