|
the line
ClassA *ptr = new ClassA[5];
defines an array of 5 ClassA objects, not an array of 5 ClassA pointers.
If you want an array of 5 ClassA pointers, your declaration will have to be:
ClassA **ptr = new ClassA*[5];
and then you will be able to execute the following code (or similar):
<br />
ClassA *ptr1 = somePointerOFClassA;<br />
ClassA *ptr2 = somePointerOFClassA;<br />
<br />
ptr[0] = ptr1;<br />
ptr[1] = ptr2;<br />
Now, coming back to your previously mentioned code block.Unfortunately, once you have defined an array as you have :
ClassA *ptr = new ClassA[5];
You cannot actually change the address of an element within that array, ie, you cannot do this:
&ptr[0] = ptr1
Hope this helps some.
Cheers,
Peter
-------------------------------------------
99 little bugs in the code, 99 little bugs,
Fix 1 bug, recompile....
101 little bugs in the code...
|
|
|
|
|
I have a VB6 (WebClass) application that, from time to time, is failing to create some random COM object (it's not always the same component). From FileMon and RegMon traces I suspect that the error occurs on CoCreateInstance, but I have no access to the HRESULT of CoCreateInstance on VB, so I have no clue of what is the problem.
Does anyone know if is there some application that hooks on CoCreateInstance and allows me to know the HRESULT it is returning?
My latest article: GBVB - Converting VB.NET code to C#
|
|
|
|
|
Hi all,
I'm trying to find and load a resource from another application. Here's the code I'm using:
HINSTANCE hToDLL;
HRSRC hsrc;
hsrc = FindResource(GetModuleHandle(app),icon,RT_ICON);
where app = "someapp.exe" and
icon = "IDI_ICON3"
This ALWAYS returns a NULL pointer, so it's always failing and the GetLastError always gives me a:
1813 The specified resource type cannot be found in the image file. ERROR_RESOURCE_TYPE_NOT_FOUND
Now I know the resource exists in the application I'm trying to get at, so what am I doing wrong?? Do I need to call LoadLibrary first? I don't think I should have to.
Any insights, help, suggestions, comments are greatly appreciated. Thanks!
Dan
|
|
|
|
|
The GetModuleHandle() function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process. Had you checked the return value of it, rather than immediately calling FindResource(), this might have been evident.
|
|
|
|
|
DavidCrow wrote:
The GetModuleHandle() function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process. Had you checked the return value of it, rather than immediately calling FindResource(), this might have been evident.
Gotcha,
I understand now, but then what do I need to do to map the file into the address space? Call LoadResource?
Thanks!
Dan
|
|
|
|
|
HMODULE hModule;
HRSRC hResource;
hModule = LoadLibrary(...);
if (NULL != hModule)
{
hResource = FindResource(hModule, ...);
if (NULL != hResource)
{
LoadResource(hResource, ...);
}
FreeLibrary(hModule);
}
|
|
|
|
|
Thanks,
I'll try that and report back
|
|
|
|
|
Since the module is an EXE, you may want to use the LoadLibraryEx() function instead, passing LOAD_LIBRARY_AS_
DATAFILE for the Flags parameter. This will prevent any calls to unresolved externals (like DllMain) and prevent the loader from loading any dependent dlls that the EXE imports.
|
|
|
|
|
Ok,
I'm further in my understanding, but still no further in a solution. Here's what I have now:
HMODULE hModule;
HRSRC hResource;
sprintf(buff,"%s.exe",app);
hModule = LoadLibraryEx(buff,NULL,LOAD_LIBRARY_AS_DATAFILE);
if (NULL != hModule){
hResource = FindResource(hModule,"IDI_ICON3",RT_ICON);
if (NULL != hResource) {
IUXLogData("the resource exists\n",TRACE1);
//LoadResource(hResource, ...);
} else if ( NULL == hResource ) {
sprintf(buff,
"the %s app is not up to date with error %d\n",
app,
GetLastError());
IUXLogData(buff,IUX_ERROR);
}
FreeLibrary(hModule);
}
I'm still getting an 1814 error though. Still unsure why I am. Is the "IDI_ICON3" or the RT_ICON the wrong stuff? the ICON resource for my test is IDI_ICON3 and I'm sure its in the app I'm trying to open, so I'm confused as to why I'm seeing this.
Any suggestions, insight, comments are greatly appreciated
Thanks!
Dan
|
|
|
|
|
You need to wrap the IDI_ICON3 with MakeIntResource as shown in the snippet below:
HRSRC hRscDLL = FindResource(NULL,MAKEINTRESOURCE(IDI_ICON3),RT_ICON);
if (hRscDLL)
{
DWORD dwIconSize = SizeofResource(NULL,hRscDLL);
HGLOBAL hMem = LoadResource(NULL,hRscDLL);
if (hMem)
{
LPVOID pIconBytes = LockResource(hMem);
if (pIconBytes)
{
.........
|
|
|
|
|
Still not having any luck
Now i have this:
hResource = FindResource(hModule,MAKEINTRESOURCE(IDI_ICON3),RT_ICON);
but yet it still comes back as NULL
Here is how it's defined in the .rc file for the app I'm loading:
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON3 ICON DISCARDABLE "Eye.ico"
So what the heck am I doing wrong?
Any other ideas, suggestions, comments? You're helping alot so far.
thanks!
Dan
|
|
|
|
|
Does IDI_ICON3 equate to the same number in both applications?
|
|
|
|
|
DavidCrow wrote:
Does IDI_ICON3 equate to the same number in both applications?
good question.
But yes they are the same number. I made sure they were.
The number is 104, and I made sure that the number is the same.
any other ideas
Thanks!
Dan
|
|
|
|
|
Woo Hoo!
I finally understand it!
Turns out that I need to be using the RT_GROUP_ICON because I'm not using hardware-dependent icons. I was then able to try other resource types and successfully got the information I needed.
Thanks Guys! I really appreciate the help!
Dan
|
|
|
|
|
I want to draw lines on a dialog in MFC(SDI) application.
Currently I am doing the same thing in OnDraw function of my CAppView by using the code.
pDC->MoveTo(x1,y1);
pDC->MoveTo(x1,y2);
Now I want to draw these lines on a dialog. Is it possible. Can I use the same functions. If yes, Then what would I use in place of pDC to call these functions.
If not refer me other ways of doing so.
Reply me soon
|
|
|
|
|
pDC->MoveTo(x,y)
That is the startpoint where you will start drawing your line. I don't see why you move 2 times to the same place.
I think you want something like this
pDC->MoveTo(startpointx, startpointy);
pDC->LineTo(endpointx, endpointy);
so you needed LineTo with a EndPoint of course
i hope this helps
Greetings
Jens
|
|
|
|
|
Do the same thing you did in OnDraw() only do it in the dialogs OnPaint().
Trust in the code Luke. Yea right!
|
|
|
|
|
Hello,
this:
CFileDialog dlg(FALSE);
CString fname = dlg.GetPathName();
const char* szBuffer = fname;
int i = sizeof(szBuffer);
CFile f;
if( f.Open ("F:\\test\\id.txt", CFile::modeWrite ) ){
try{
f.Write(szBuffer, i);
f.Close();
}
catch (CFileException *e){
AfxMessageBox ("Error!");
e->Delete();
}
}
}
...if you type in "rtf" it insert in my "id.txt" file:
F:\r¼ÖA Q a ¼ºÜþ4 ýýýý€*0 *0 ¬)0 Ì(0 ÍÍÍÍÍÍÍÍØ(0
why??
Thanks, Mark
|
|
|
|
|
You might want to try:
CFileDialog dlg(FALSE);
CString fname = dlg.GetPathName();
const char* szBuffer = fname.GetBuffer(0);
int i = fname.GetLength();
CFile f;
if( f.Open ("F:\\test\\id.txt", CFile::modeWrite ) )
{
try{
f.Write(szBuffer, i);
f.Close();
} catch (CFileException *e)
{
AfxMessageBox ("Error!");
e->Delete();
}
}
fname.ReleaseBuffer();
-Mike Zinni
"No sh*t it's tough. If it wasn't, everybody and their sister would be an engineer and then you wouldn't have a job."
|
|
|
|
|
It works!!!!Thanx.
Thanks, Mark
|
|
|
|
|
By the way, how can i change the code to read the file?
Thanks, Mark
|
|
|
|
|
Try:
CFileDialog dlg(FALSE);
CString fname = dlg.GetPathName();
char* szBuffer = NULL;
int i = 0;
CFile f;
if( f.Open ("F:\\test\\id.txt", CFile::modeRead ) )
{
try {
i = f.GetLength();
szBuffer = new char[i];
if(szBuffer != NULL)
f.Read(szBuffer, i);
f.Close();
} catch (CFileException *e)
{
AfxMessageBox ("Error!");
e->Delete();
}
}
if(szBuffer != NULL)
delete [] szBuffer;
-Mike Zinni
"No sh*t it's tough. If it wasn't, everybody and their sister would be an engineer and then you wouldn't have a job."
|
|
|
|
|
I must cast the szBuffer to a CString type:
CString csPath = szBuffer;
is this allowed?
Thanks, Mark
|
|
|
|
|
Actually, this implicitly casts szBuffer to a LPCTSTR, which CString has an assignment operator for.
|
|
|
|
|
Nice, but still generates test.pmjyyyxx as output????
Thanks, Mark
|
|
|
|