|
I've written a JAva program that uses JNI to call some C++ methods to retrieve webcam images using video for windows. The problem is that every time I retrieve an image, memory usage keeps going up. I'm still a noob to C++ so the problem may be something really simple. Here's my code:
code:
HWND m_capWindow;
int connectedIndex;
LRESULT PASCAL callbackProc(HWND hWnd, LPVIDEOHDR lpVHdr);
LRESULT PASCAL callbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
return 0;
}
JNIEXPORT void JNICALL Java_client_desktop_dateclick_Test_connect
(JNIEnv *, jobject, jint index) {
m_capWindow = capCreateCaptureWindow ("", WS_CHILD, 0, 0, 0, 0, GetDesktopWindow(), 10);
//m_capWindow = capCreateCaptureWindow ("Capture", WS_CHILD | WS_VISIBLE, 50, 50, 480, 360, GetDesktopWindow(), 10);
// connect to the new driver
BOOL rval = capDriverConnect (m_capWindow, index);
capSetCallbackOnFrame(m_capWindow, callbackProc);
capPreview(m_capWindow, FALSE);
}
JNIEXPORT jbyteArray JNICALL Java_client_desktop_dateclick_Test_getImage
(JNIEnv *env, jobject) {
CString fileName;
int contentLength;
BYTE *frame;
capGrabFrame(m_capWindow);
//capGrabFrameNoStop(m_capWindow);
fileName = "capframe.bmp"; //and use this file...
capFileSaveDIB( m_capWindow, (LPCTSTR)fileName);
CFile jpegTemp;
// now read the resulting file into a buffer
jpegTemp.Open("capframe.bmp", CFile::modeRead);
contentLength = (UINT)jpegTemp.GetLength();
//allocate the buffer for the jpeg frame
frame = new BYTE[contentLength];
//now read in the jpeg file
jpegTemp.Read(frame, contentLength);
jpegTemp.Close();
jbyteArray ba = env->NewByteArray(contentLength);
env->SetByteArrayRegion(ba, 0, contentLength, (jbyte*) frame);
delete frame
return ba;
}
JNIEXPORT void JNICALL Java_client_desktop_dateclick_Test_disconnect
(JNIEnv *env, jobject) {
capDriverDisconnect(m_capWindow);
}
|
|
|
|
|
Memory Leakage is caused by
khrstopher wrote: delete frame;
you should use
delete []frame;
|
|
|
|
|
If he's using any of the MSVC compilers I've worked with this will not result in a leak - It's wrong but it doesn't result in a memory leak.
Steve
|
|
|
|
|
hi
i am using visual studio c++ 6 and SDK (feb 2003 edition)
I want to display data from a database in a dialog box i have. Do i use a editbox or ??
From reading a few sites i see that datasets or a datagrid is used, i cant seem to find this in VC++6
where is it or what am i ment to use
many thanks
|
|
|
|
|
VC6 is three versions out of date. As such, it does not support .NET, and datagrids are part of the .NET framework. Have you seem the ultimate grid ? http://www.theultimatetoolbox.com/?CID=CPTbxTop[^]
The reason this product exists is that there is no useful grid that comes with VC6, or even MFC to this day. There are some free grids about, in fact, Chris Maunder wrote one, which is on CP somewhere. Obviously, UG is better, that's why it's a commercial product, but the free one may be all you need.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
You might consider using the MSFlexGrid (Active-x) control Grids.
VuNic
|
|
|
|
|
or Chris' grid ?!
|
|
|
|
|
|
i just want to display info from a database which is MySQL 4.1.18, i dont want the user to edit it or anything just want to display it.
what one do ye recommend
|
|
|
|
|
so what's your problem...?
your can fetch datas into all of these grid...
|
|
|
|
|
I am developing an application that is available in multiple languages.
Currently we set the UI language for the application using an installer which means that you can run in German on any language OS. However there is one problem and that is with Microsoft dialogs and wizards. They seem to want to load the resources based on the current locale.
An example is: OS is English, Locale is France, and you install German application. This results in French resources being used for property sheets while German is used everywhere else.
There are two ways that I have found to stop this. One was to create a seperate DLL for each language. However the company I was hired to do localization work for seems to still be in afterthought mode and there is too much resistance for this. Not to mention if I had unlimited time to really do localization right there are many problems to fix.
The second way was to call SetThreadLocale(). This loads the wizards correctly, however I keep seeing that SetThreadLocale() is a bad function and should never be used. Is this true?
We already use our own version printf() to allow different non-standard tokens to be used in strings. So I also overwrote this so the use of formatting numbers, dates, and other localization settings is already preserved based on user locale.
I just wanted to make sure I would or wouldn't be making a huge mistake using SetThreadLocale because I didn't know all the reasons it has been blacklisted.
Thanks
If you start a fire for a man, he will be warm for a day. If you start that same man on fire, he will be warm for the rest of his life.
|
|
|
|
|
Localization / Internationization is not a simple task. It will be more complex if your application is not UNICODE app & need to support asian languages (eg. Traditional/Simplified Chinese / Japanese / Korea).
Use SetThreadLocale() is fine if it solves your problem. But in my experience, it didn't.
MS Press has a good book for that but I cannot find the name.
There is a new book "Internationalization and Localization Using Microsoft .Net" which I havn't read.
|
|
|
|
|
hi everyone
im developing a program that among other things draws images on a form; but im having this little problem
when i draw a large image and move the window several times it doesn't display the image or sometimes it displays part of it
is there anyway to fix this ?
|
|
|
|
|
You need to draw the image in your OnPaint handler, then it will be drawn whenever your form needs to refresh itself.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Also check that you are deleting all your GDI objects correctly. If your app runs out of them it can cause unusual display problems.
A good way to check for GDI leaks is watching the GDI object count in the Task Manager, finding them is another problem altogether.
|
|
|
|
|
maybe it is some helpful to you
CImage m_Image;
m_Image.Load(Filename);
In funtion Onpaint(WM_PAINT)
OnPaint()
{
CPaint DC(this)
m_Image.BitBlt(dc.m_hDC,CRect(0,0,800,600),CPoint(0,0));
// m_Image.StretchBlt(GetDC()->m_hDC,CRect(0,0,200,200)/*Dest*/,CRect(0,0,800,600));
}
|
|
|
|
|
Hi!
I am trying to run an .exe file in my C++ code.
Let me say,
I have do.exe program.
And another control_do.exe program that can run do.exe conditionally.
Any code suggestion that is generic, not VC++?
I am using Visual Studio 2005, but code is standard c++, but VC++.
Thanks!
Yonggoo
|
|
|
|
|
|
|
Use shell Execute
for example this line below opens a browser connecting to the appropriate link passed to it where xyz is the name of the site
ShellExecute(NULL, NULL,"http://xyz.com", NULL, NULL,SW_NORMAL );
Vision is Always important and so is your ATTITUDE.
Wishes.
Anshuman Dandekar
|
|
|
|
|
|
Hi,
I've having problem when trying to open a database connection using CDatabase::OpenEx method.
Windows return the error message: Error 997. Overlapped IP Operation in progress.
dbp->OpenEx(Connectionstr, CDatabase::noOdbcDialog);
Where Connectionstr value == "DSN=myDSN" and myDSN is a defined system DSN on the system.
Note. This application have two CDatabase object pointing to two differnt mdb file. The first object open sucessfully using the same OpenEx method.
Please help.
Thanks
|
|
|
|
|
How do I do this:
typedef enum Something {
FirstValue,
SecondValue,
ThirdValue,
FourthValue,
Etc
} Something;
int main( void )
{
Something MyVar;
MyVar = SecondValue;
MyVar++;
}
Regards [[]]
hint_54
|
|
|
|
|
One possible solution is casting via numeric type such as integer.
Kuphryn
|
|
|
|
|
Try
MyVar = (Something)(MyVar + 1);
This is dangerous behavior since MyVar+1 may not be in Something such as:
<br />
typedef enum Something {<br />
FirstValue=0,<br />
SecondValue=2,<br />
ThirdValue=4,<br />
FourthValue=6,<br />
Etc<br />
} Something;<br />
|
|
|
|