tomdickens
2010-02-22 00:46:01 UTC
I have a Windows Forms application, Visual C++ 2005, compiling it using /clr.
I need to use the image-handling library CImg, which is packaged simply as a
header file CImg.h that you include in your project.
I added CImg.h to stdafx.h, inside #pragma unmanaged/managed preprocessor
instructions. The code compiles just fine.
However, when I construct a CImg object and then try to write text into it
to display, I get a memory error -
System.AccessViolationException: Attempted to read or write protected
memory. This is often an indication that other memory is corrupt.
at cimg_library.CImg<unsigned char>.draw_text<unsigned char>(CImg<unsigned
char>* , Int32 , Int32 , SByte* , Byte* , Int32 , Single , UInt32 )
Is this because of using unmanaged memory in a managed code? I thought IJW
would handle this. I've asked this same question on the CImg forum but have
no reszponse yet.
Thanks,
Tom
Here is the detailed code:
Put in stdafx.h:
#pragma once
#pragma unmanaged
#pragma comment (lib, "shell32.lib")
#pragma comment (lib, "gdi32.lib")
#pragma comment (lib, "user32.lib")
#define cimg_OS 2
#define cimg_display_type 2
#include "CImg.h"
using namespace cimg_library;
#pragma managed
Call the functions:
CImg<unsigned char> img(640,400,1,3); // Define a 640x400 color image with 8
bits per color component.
img.fill(0); // Set pixel values to 0 (color : black)
unsigned char purple[] = { 255,0,255 }; // Define a purple color
img.draw_text(100,100,"Hello World",purple); // IT DIES HERE ---- Draw a
purple "Hello world" at coordinates (100,100).
img.display("My first CImg code"); // Display the image in a display window.
I need to use the image-handling library CImg, which is packaged simply as a
header file CImg.h that you include in your project.
I added CImg.h to stdafx.h, inside #pragma unmanaged/managed preprocessor
instructions. The code compiles just fine.
However, when I construct a CImg object and then try to write text into it
to display, I get a memory error -
System.AccessViolationException: Attempted to read or write protected
memory. This is often an indication that other memory is corrupt.
at cimg_library.CImg<unsigned char>.draw_text<unsigned char>(CImg<unsigned
char>* , Int32 , Int32 , SByte* , Byte* , Int32 , Single , UInt32 )
Is this because of using unmanaged memory in a managed code? I thought IJW
would handle this. I've asked this same question on the CImg forum but have
no reszponse yet.
Thanks,
Tom
Here is the detailed code:
Put in stdafx.h:
#pragma once
#pragma unmanaged
#pragma comment (lib, "shell32.lib")
#pragma comment (lib, "gdi32.lib")
#pragma comment (lib, "user32.lib")
#define cimg_OS 2
#define cimg_display_type 2
#include "CImg.h"
using namespace cimg_library;
#pragma managed
Call the functions:
CImg<unsigned char> img(640,400,1,3); // Define a 640x400 color image with 8
bits per color component.
img.fill(0); // Set pixel values to 0 (color : black)
unsigned char purple[] = { 255,0,255 }; // Define a purple color
img.draw_text(100,100,"Hello World",purple); // IT DIES HERE ---- Draw a
purple "Hello world" at coordinates (100,100).
img.display("My first CImg code"); // Display the image in a display window.