|
Hi Mark,
Thanks for replying.
Mark Salsbery wrote: Possible, maybe, but it doesn't make much sense. Why are trying to use
modal dialogs modelessly?
If i use CMyDlg in a modeless fashion(also providing a parent window handle), the user will still be able to control the parent window. I want the user to respond within a timeout value. If there is no response then close the CMyDlg window and any message boxes opened within CMyDlg.
Mark Salsbery wrote: How did you find the window to change its title?
AfxMessageBox/MessageBox has a title. The ::FindWindow API gives the handle to the window by passing the title. In my case the title displayed in the MessageBox keeps changing with time(as a result of some SQL query).
Sunil
|
|
|
|
|
sunilpv1982 wrote: the user will still be able to control the parent window
You can disable the parent window. That's what MFC does to simulate a modal dialog.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi all,
I'm using Visual Studio 2005. I have a workspace in visual C++ 6.0 which provides a set of library functions[DLL]. I have a client application which uses one of the function in the library. This client was working perfectly in VC6.0, but when I ported to VC8, it started showing link error:
Signature of the Function in the library[DLL] Header:
ULONG sendInfo(const bool isRequest, TCHAR pParameters[MESSAGES_PARAMS][MESSAGE_SIZE], ULONG netCallId);
Implementation of the Function in the library[DLL] Source:
ULONG NIHAI_TAPI::sendInfo(const bool isRequest, TCHAR pParameters[MESSAGES_PARAMS][MESSAGE_SIZE], ULONG netCallId)
{
....
....
....
}
Client Application Call:
TCHAR messageParameters[MESSAGES_PARAMS][MESSAGE_SIZE];
ULONG netCallId;
bool request;
returnCode = tapiConnection.sendInfo(request, messageParameters, netCallId);
But I'm getting a link error:
nihai_worker.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: unsigned long __thiscall NIHAI_TAPI::sendInfo(bool,unsigned short (* const)[81],unsigned long)" (__imp_?sendInfo@NIHAI_TAPI@@QAEK_NQAY0FB@GK@Z) referenced in function "private: unsigned long __thiscall NIHAI_Worker::sendToTAPI(unsigned int,unsigned short (* const)[81],unsigned long)" (?sendToTAPI@NIHAI_Worker@@AAEKIQAY0FB@GK@Z)
Kindly suggest a resolution for the above problem.
Thanks in Advance.
regards,
Rajesh
|
|
|
|
|
One thing I know (there are soooome others) is that VC6 defaulted to not-unicode, and VC8 defaults to unicode.
TCHAR means different things depending on the defines. So your program could be thinking TCHAR = wchar_t (ie, short), while the lib you're linking against was compiled with TCHAR = char, and the two decorated functions no longer match...
So, to resolve it, you need to make sure both of your chunk of codes agree on what TCHAR means.
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
u 2 fast -> i 2 drugz.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Well, I'm waiting for a colleague to finish a bit of work so I can carry on, so I'm pouncing for a little while. And I like to race you.
Of course, while I was typing my last response, Cedric wrote a better and faster answer than me. Boo Cedric, Boo!
Iain.
ps, Noone's delivered your urgent drugs yet?
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
Iain Clarke wrote: Of course, while I was typing my last response, Cedric wrote a better and faster answer than me. Boo Cedric, Boo!
Why don't we have a devil emoticon when we need it ?
|
|
|
|
|
Iain Clarke wrote: Boo Cedric, Boo!
Definitely! That guy is too smart.
Iain Clarke wrote: ps, Noone's delivered your urgent drugs yet?
Nope my friend...But since you are such a nice guy, ...plz plz plz urgent!!!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
CPallini wrote: Definitely! That guy is too smart.
Well, it seems that you really abuse drugs
|
|
|
|
|
Hi Pallini and Iain,
Thanks for your response.
But I still have that error.
Both the Characterset are set to the following:
Character Set: Use Unicode Character Set
Treat wchar_t as Built-in Type: No(/Zc:wchar_t-)\
thanks and regards,
Rajesh
|
|
|
|
|
sorry for the silly question, did you linked to the import library.
|
|
|
|
|
Yes Rajkumar,
I have linked to the import library.
thanks in advance,
regards,
Rajesh
|
|
|
|
|
you may inspect the import library for the symbol may be this(
[libexplorer addin^], [libdump^]) tools helps or by simply open in binary editor. But basically these meant the symbol are not properly created in the import library, possibly check dllexport declarator is used for the class in the DLL class declaration.
|
|
|
|
|
Rajesh_Parameswaran wrote: Hi Pallini and Iain,
Since it is a reply to a Cedric post, I assume you're looking for the widest audience.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Actually i saw that was replied to you, but when OP had seen world is behind "Plz sir slow down", he moved it there.
|
|
|
|
|
Possibly.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
It seems a UNICODE vs ANSI build conflict, i.e. VC8 project makes UNICODE builds by default, while VC6 makes ANSI ones. Possibly you have a ANSI DLL and a UNICODE client. Try to change the client setting: choose Project->Properties menu item, then select Configuration Properties->General node and finally change the Character Set switch.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Coming back your original question, go back to basics.
Write a function such as:
int HowBigIsATCHAR (TCHAR i_is_a_letter)
{
return sizeof (i_is_a_letter);
}
not forgetting to use dllimport / export.
Try using it in a your client program.
See if you get link errors, and also what size it gives you.
The TCHAR thing may be a blind alley, and you are having linking trouble with constant sizeed arrays. I've never passed a big array be value before...
Try passing it as TCHAR **, and see if that helps?
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
Hello From Huntington Beach.
I ahve a question for VS C++ 2005. Is it possible to pass a function declaration as functio paramter. Here is my code snippet below.
here the function that is invoking the action
void BINARY::get_tree()
{
// Presonition: teakes last remainder of stack
// Postcondition: Copies the final tree and then startest computing the expression
// Library used: stack.h tree.h and treeexpression.h
// local variables
binary_tree_node<char *=""> *temp_tree=new binary_tree_node<char *>;
// start the procedure
temp_tree=top(tree_construct);
full_tree=tree_copy(temp_tree);
tree_clear(temp_tree);
pop(tree_construct);
postorder(void compute_result(char *test),full_tree); // <- is this legal?
// end of the procedure
}
here is the post order template function:
template<class process,="" class="" btnode="">;
void postorder(Process f, BTNode* node_ptr)
{
// Precondition: takes function and tree pointer as parameters
// Postcondition: set post order results to function of choice
// Runtime: O(N)
// Local Variables: None
// start of the procedure
if(node_ptr!=NULL)
{
postorder(f,node_ptr->left());
postorder(f,node_ptr->right());
f(node_ptr->information()); //<- here is the function
}
// end of procedure
}
and this function send the data to void BINARY::compute_result()
Any ideas?
thanks Mikivy
|
|
|
|
|
mikyivy wrote: postorder(void compute_result(char *test),full_tree); // <- is this legal?
not the declaration, you can pass the function pointer.
postorder(compute_result, full_tree);
provided Process is defined as
typedef void (* Process)(char *test);
mikyivy wrote: void BINARY::compute_result()
[Added]
if compute_result is not a static member then you need to use pointer to member.
[/Added]
|
|
|
|
|
mikyivy wrote: postorder(void compute_result(char *test),full_tree); // <- is this legal?
No, but you could do something like:
postorder(compute_result, full_tree);
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
mikyivy wrote: Hello From Huntington Beach.
HB! I spend a significant amount of time in HB
Greetings from Fullerton.
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
I am working on a hardware controller device which has a USB port I need to use to write commands to the controller.
I have been able to ennumerate the device and obtain the handle for that device using CreateFile().
But when I try to execute ReadFile() or WriteFile(), the function fails and GetLastError() returns ERROR_INVALID_FUNCTION.
My code looks like this:
HANDLE hUsbDevice = CreateFile(path.c_str(),GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hUsbDevice == INVALID_HANDLE_VALUE)
{
val = GetLastError();
cout<<"failed in CreateFile"<<" error: "<<val<<"\n" ;
}
else
{
char _send_buff[] = {'I','n','i','t','1','=','0','\0'};
int _send_size = sizeof(_send_buff);
int _wrstatus = 0;
DWORD _bytes_written = 0;
_wrstatus = WriteFile(hUsbDevice,_buff,_size,&_bytes_written,NULL);
if (!_wrstatus)
cout<<"\nError while writing port: "<<GetLastError()<<endl;
}
Where am I going wrong here
|
|
|
|
|
You know that USB is totally different than a serial port on this level ? You can't just open the 'port' and send data on it. Instead you get a handle from a device driver and you communicate with this driver. The driver is then in charge of the communication with the device. Did you receive any kind of information with the USB device ?
|
|
|
|
|
I do have some manuals but they do not say much. This USB port is an auxillary port of the controller. Normally it is not used.
But I do know the USB drivers. Could you please tell me the procedure to get the driver handle? Is there any article I can refer to?
|
|
|
|