Яйца являются довольно хорошим способом распределить приложения Python. Думайте о нем как о независимом от платформы .deb файле, который установит все зависимости и этажерку. Преимущество состоит в том, что это просто в использовании для конечного пользователя. Недостаток - то, что это может быть громоздким для упаковки приложения как .egg файла.
необходимо также предложить альтернативное средство установки в дополнение к .eggs. Существуют некоторые люди, которым не нравится использовать яйца, потому что им не нравится идея программы, устанавливающей любое программное обеспечение, которое она хочет. Они обычно имеют тенденцию быть типами системного администратора.
Such a thing exists:
A utility for simple printf-style debugging of images in Win32 C/C++ applications.
http://billbaxter.com/projects/imdebug/
My coworker raves about it.
--chris
Мой коллега написал эту статью CodeProject для написания визуализаторов отладчика
http://www.codeproject.com/KB/showcase/BuildDebuggerVisualizer.aspx
Он использует наш продукт, набор инструментов для создания образов .NET, но его можно легко адаптировать для использования вместо этого классов изображений .NET.
Этот пример поможет: http://www.codeproject.com/KB/WPF/WPF_Glimps.aspx
Класс может быть добавлен в C ++ CLI в отдельной DLL.
Я отказался от своего старого ответа, поскольку он не имел отношения к делу. В новой версии также используется OpenCV (поскольку я пытаюсь отобразить изображение OpenCV), но ее можно адаптировать к любой платформе.
Код ядра - это то место, где он принимает адрес памяти адрес
и количество байтов для чтения через numrows
, numcols
и byte_size
и считывает эти байты в буфер. Я уверен, что вы можете адаптировать эту часть кода для своих нужд.
#include "stdafx.h"
#include <windows.h>
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
void imshow_debug(const LPCVOID address, const int numrows, const int numcols, const int type, const int byte_size, const int step, const string windows_title)
{
// Initialize
unsigned long PID;
SIZE_T read_bytes = 0;
// Allocate space for the image
const int bytes_to_read = numrows*numcols*byte_size;
uchar *image_data = new uchar[bytes_to_read];
Mat Image(numrows,numcols,type,image_data,step);
// Get the handle and PID
HWND handle = FindWindowA(0, windows_title.c_str());
if (!FindWindowA(0, windows_title.c_str()))
{
printf("Window %s not found!", windows_title);
exit(0);
}
GetWindowThreadProcessId(handle, &PID); /* Get windows PID from a window handle */
HANDLE WindowsProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
// Read the image
ReadProcessMemory(WindowsProcessHandle,address,image_data,bytes_to_read,&read_bytes);
if(bytes_to_read != read_bytes)
{
cout<<"Could not read entire image"<<endl;
exit(0);
}
// Display the image
namedWindow("Image");
imshow("Image",Image);
waitKey();
// Clean up
CloseHandle(WindowsProcessHandle);
delete[]image_data;
}
int main(int argc, char* argv[])
{
imshow_debug((LPVOID)0x03af0370,300,300,CV_64F,sizeof(double),2400,"C:\\Documents and Settings\\jacobm\\My Documents\\Visual Studio 2005\\Projects\\Head\\debug\\SSR_VideoComp.exe");
return 0;
}
То, о чем вы просите, естественным образом невозможно реализовать в родном C ++. Вся технология визуализации внутри визуального отладчика организована вокруг CLR, следовательно, либо C #, либо C ++ / CLI.
Единственное, что может помочь в родной стране, - это механизм надстройки вычислителя выражений . Конечно, он предназначен для возврата строки и удаления, но это код, поэтому теоретически вы можете запустить любой код, включая отображение окна и отображение данных, которые вам нужны (после прочтения их из отлаживаемого кода).
Это немного обидно, когда эти замечательные функции отсутствуют в нативной части.