#pragma once #include "pch.h" #include "stdafx.h" #include "Python.h" #include #include //#include "md5file.h" //#pragma warning (disable : 4996) //#include //#include //#include "shlobj.h" //#include "atlstr.h" //#include //#include "stdio.h" // //#include "md5global.h" //#include "md5.h" //#include //#include //#include //#include //#include 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 T* create_sarr_ptr(int size) { // T* result = new T[size]; // return result; //} ///* //@brief ´´½¨¶þάָÕë //*/ //template 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 T* create_darr2_ptr(int row_size, int col_size) { // T* darray2 = new T[row_size*col_size]; // return darray2; //} // ///* //@brief µ¥Êý×é½á¹¹Ì壬Á½ÖÖ³õʼ»¯·½·¨£¬´ø²Î·½·¨ÒÑ¿ª±ÙÄÚ´æ¿Õ¼ä //*/ //template struct sarr { // T* head; // int size; // sarr(int size) { // this->size = size; // this->head = create_sarr_ptr(size); // }; // sarr() { this->size = 1; this->head = create_sarr_ptr(1); }; // sarr(const sarr* data) { // T* new_ptr = create_sarr_ptr(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* data) { // if (this != data) { // if (this->head != NULL) { // delete[] this->head; // this->head = NULL; // } // T* new_ptr = create_sarr_ptr(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 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(row, col); // }; // darr2(const darr2*data) { // // T* new_ptr = create_darr2_ptr(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 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(row, col); // }; // darr(const darr* data) { // T** new_ptr = create_darr_ptr(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* data) { // int row = data->row_size; // int col = data->col_size; // T** new_ptr = create_darr_ptr(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* 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(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(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 buffer{ new unsigned char[bufferLen] {} }; // unsigned long long totalReadCount = 0; // decltype(fin.gcount()) readCount = 0; // // ¶ÁÈ¡ÎļþÄÚÈÝ£¬µ÷ÓÃMD5Update()¸üÐÂMD5Öµ // while (fin.read(reinterpret_cast(buffer.get()), bufferLen)) // { // readCount = fin.gcount(); // totalReadCount += readCount; // MD5Update(&context, buffer.get(), static_cast(readCount)); // } // // ´¦Àí×îºóÒ»´Î¶Áµ½µÄÊý¾Ý // readCount = fin.gcount(); // if (readCount > 0) // { // totalReadCount += readCount; // MD5Update(&context, buffer.get(), static_cast(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(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 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 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 PyObject* parseCppData(sarr* data) { // return parseCppData(data->head, data->size); //} //template PyObject* parseCppData(darr* 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 void parsePyData(T* data, PyObject* pydata, int size) { // // for (int i = 0; i < size; i++) { // parsePyData(*(data + i), PyList_GetItem(pydata, i)); // } //} //template 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 void parsePyData(sarr* data, PyObject* pydata) { // parsePyData(data->head, pydata, data->size); //} //template void parsePyData(darr* 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ϱê //*/ //templatevoid parsePyTuple(T& data, PyObject* pytuple, int index) { // parsePyData(data, PyTuple_GetItem(pytuple, index)); //} // //templatevoid parsePyTuple(sarr* data, PyObject* pytuple, int index) { // parsePyData(data, PyTuple_GetItem(pytuple, index)); //} //templatevoid parsePyTuple(darr* data, PyObject* pytuple, int index) { // parsePyData(data, PyTuple_GetItem(pytuple, index)); //} // ///* //¶þάÊý×é´æ´¢·½Ê½×ª±ä£¬darrת³Édarr2£¬ÓÃÓÚjni½«´Ójava½ÓÊյĶþλÊý×éת»»³ÉC++½ÓÊÕµÄdarr2 //*/ //template darr2* convert_darr2_from_darr(darr* data) { // int row = data->row_size; // int col = data->col_size; // T* new_ptr = create_darr2_ptr(row, col); // darr2* result = new darr2(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 darr2* convert_darr2_from_darr_int(darr* data) { // int row = data->row_size; // int col = data->col_size; // T* new_ptr = create_darr2_ptr(row, col); // darr2* result = new darr2(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 darr2* convert_darr2_from_sarr(sarr* data) { // int row = data->size; // int col = 1; // T* new_ptr = create_darr2_ptr(row, col); // darr2* result = new darr2(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; //}