|
Alvaro Mendez wrote:
Try doing this instead:
EXPORT char *get_compile_time(){ return __TIME__;}
Yeah, I tried doing that as well. I also tried all the types (int,float,double,etc) and also tried returning the information via a pointer on one of the "in" parameters. Still did not work. I also tried running the application and then tried loading it while the exe was running, and that still didn't work.
Alvaro Mendez wrote:
but it appears as though loading the EXE this way does not load its global variables. Your compile_time variable is global. This may be the root of the problem.
My guess is the same. The LoadLibrary function just isn't loading the global variables. But if I make a local anything and try:
return "I am confused";
It still will return a NULL pointer.
So the global memory space still doesn't quite apply based on those tests. Got a Humdinger here. Any other ideas? I'm flat out. I'm looking around for more info on how the global stuff is handled when an app is loaded using LoadLibrary, but I'm not having much luck.
Does anyone have any ideas? Even some insight on the matter? Please help if you can. I really appreciate it.
Dan Willis
|
|
|
|
|
OK, I'm gonna give it a shot. How did you define your EXPORT macro?
Regards,
Alvaro
The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing. -- Albert Einstein
|
|
|
|
|
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
That's how it's defined. Thanks I really appreciate the help.
Dan Willis
|
|
|
|
|
OK, just tried it and it's working fine, even with the global variable!
I put your code into a little EXE (Doodle.exe), compiled it, and then copied it to a second EXE with a different name (Doodle2.exe). Here's the code:
char* compiler_time = __TIME__;
extern "C" __declspec (dllexport) char* get_compile_time()
{
return compiler_time;
}
void CDoodleDlg::OnButtonCallExe()
{
typedef LPSTR (CALLBACK* LPFNDLLFUNC1)();
HINSTANCE hToDLL = LoadLibrary("Doodle2.exe");
if (hToDLL == NULL)
{
AfxMessageBox("Failed to load the app.");
return;
}
LPFNDLLFUNC1 lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hToDLL, "get_compile_time");
if (lpfnDllFunc1 != NULL)
{
char* strResult = lpfnDllFunc1();
if (strResult == NULL)
AfxMessageBox("WTF!");
}
}
Are you sure it's your strResult that comes back NULL and not your lpfnDllFunc1? By the way, I couldn't define the EXPORT macro since MFC already defines it.
Regards,
Alvaro
The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing. -- Albert Einstein
|
|
|
|
|
LOL I was afraid that would happen. lol. something fishy is going on fer sure.
Alvaro Mendez wrote:
Are you sure it's your strResult that comes back NULL and not your lpfnDllFunc1?
Yes because I've been able to step into the exe code, sit and follow it's execution, and then watch the function return NULL. Everytime.
Well, I think you've gone as far as you can. That does help verify that it must be something funky in my build options or in the application itself that is preventing me for getting at what I need.
I really appreciate your help. Helps me understand a little bit more every day. Thank you very much for that. Guess I have to try from square 1 again
LOL Software never ceases to amaze me. At least I'm not having this problem with my telemetry software.
Once again thank you
Dan Willis
|
|
|
|
|
I'm glad to have helped.
Too bad it didn't uncover the problem.
Regards,
Alvaro
The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing. -- Albert Einstein
|
|
|
|
|
|
hello all ,
In MDI project, i have always an ChildFrame which is active.
when i press a key i want to activate the view asociate to the childFrame which is active.
You know how to do this?
Thx in advance
|
|
|
|
|
GetActiveView()
Regards,
Alvaro
The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing. -- Albert Einstein
|
|
|
|
|
Alvaro Mendez wrote:
GetActiveView()
Is not to return the active view ?
in my case i havn't active view, only active frame, and so i want to active the view associated with this frame
|
|
|
|
|
Oh, I see. Then perhaps SetActiveView is what you need.
Regards,
Alvaro
The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing. -- Albert Einstein
|
|
|
|
|
ok that is what i think but how to use it :
void SetActiveView(
CView* pViewNew,
BOOL bNotify = TRUE
);
I must to get a pointer my view but how to find this?
|
|
|
|
|
Is there a way to create c++ variables out of literals read in from a file? I want to read in a file that has a line that reads CONNECT. I want to make a variable named CONNECT and have the value of 2000 so I can use it in a switch/case statement. I want to be able to create these variables dynamically so that I can eliminate hard-coded values.
Any help will be appreciated,
Ray
|
|
|
|
|
rromero wrote:
Is there a way to create c++ variables out of literals read in from a file?
not at run time.
at compile time you can use the "##" construct to glue two strings together in a macro.
-c
When history comes, it always takes you by surprise.
|
|
|
|
|
There's no way to do it at run-time, but you can go with something like a hash map, where you associate a name ("CONNECT") with a value (2000). Check out the std::map class, which you can define like this:
#include <map>
using namespace std;
typedef map<CString, int> FileVariables;
FileVariables vars;
fv["CONNECT"] = 2000;
fv["DISCONNECT"] = 4000;
if (fv["CONNECT"] > 10000)
....
Regards,
Alvaro
The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing. -- Albert Einstein
|
|
|
|
|
And where it can be downloaded or a demo can be seen ?
Thanks in regards!
|
|
|
|
|
CSMTPConnection class and CMimeHeader, CMimeMessage, CMimeText in MFC 7.
Look at MSDN examples.
Art
|
|
|
|
|
Let's say I have changed the captions of some buttons in my MFC dialog application at runtime. Is it possible at some time later to reload the original names from the resource file without restarting the application and how?
|
|
|
|
|
I suggest you using a sting table and then restore the names with LoadString().
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Has anyone seen any good example code for doing DTMF decoding? I know that TAPI can do this with a modem, but I need to do it with a standard wave stream - it's a non-telephony application.
If you don't, then perhaps you could point me in the direction of some good FFT code or a library of some sorts.
Thanks in advance,
--
Simon Steele
Programmers Notepad - http://www.pnotepad.org/
|
|
|
|
|
Hi
I was wondering how to convert a .gif to a .ico to use in a dialog box.
Thanks
Regards
Nitin
|
|
|
|
|
easiest way is to open the gif in something like paintshop pro, then copy it (edit|copy type copy i mean), and paste into the VisStudio dialog editor. thats what I do, anyway.
#include <beer.h>
|
|
|
|
|
Hi
I tried it but was not successful. It is not displaying the entire image but just a part of it.
Thanks
Nitin
|
|
|
|
|
Then rescale the image in paintshop pro (or whatever) first
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
Rescaling the image ends up distorting it. I am using Microsoft Photoeditor.
I'm definitely doing this the wrong way but don't know why.
Thanks
Nitin
|
|
|
|