|
Hi,
when I pass a String from VB to C++dll, the code will work, the string will appear on a MessageBox called from the Dll.
When i click Ok the following error message appears: "Wrong Dll_Calling Convention" !!!????
The Code
VB:
<br />
Private Declare Function fnWin32DLL02 Lib "E:\WORKING\OMRON\GDT\EigeneDLL\C++ DLL mit VB (Test01)\Win32DLL02.dll" (ByVal a As String) As String<br />
<br />
Private Sub Form_Load()<br />
<br />
Dim s As String<br />
<br />
s = "Übergabe aus VB"<br />
fnWin32DLL02 (s)<br />
<br />
End Sub<br />
Cpp:
<br />
WIN32DLL02_API BSTR fnWin32DLL02(LPCSTR s)<br />
{<br />
MessageBox(NULL,s,"Info",MB_OK); <br />
return CComBSTR (BSTR("abc"));<br />
}<br />
When i change the LPCSTR s to BSTR s, ...the same error appears !
Could you imagine where the error comes fom ?
Many Thanx and best regards
Croc
|
|
|
|
|
Hey Croc, have you seen my (now old) reply?
http://www.codeproject.com/script/Forums/View.aspx?fid=1647&msg=2381364[^]
You have to use __stdcall calling convention.
Furthermore you need:
(1) to use SysAllocStringByteLen("hhh", 3) to allocate the returned string
(2) use LPCSTR (as you done in the posted code) for the input string.
Good luck!
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.
[my articles]
|
|
|
|
|
1000 *TH*A*N*X* PALLINI,
now it work's an no sry i was to fast, so i didn't remember the __stdcall !!!!!!!!!!!
Thanx again & best regards
Croc
|
|
|
|
|
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.
[my articles]
|
|
|
|
|
This is exactly what CPallini and I were talking about when you posted about this before. The C++ side needs to have __stdcall calling convention. This makes the order parameters are put on and pulled off the stack (and which side is responsible for cleanup) compatible with VB. Otherwise your stack is trashed on the return from the call, hence the error your're seeing. You're fortunate, in the past the error would have been silent and your C++ would have blown up spectacularly the next time it made a function call .
You need to find the definition of WIN32DLL02_API and make sure it includes __declspec(__stdcall)
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Hi Matthew,
i added
#define WIN32DLL02_API __declspec(_stdcall) in the definition of WIN32DLL02_API, but without this the code worked too !???
Best regards
Croc
|
|
|
|
|
Hi friends,
I want to send my dialog box to the system-tray when "WINDOWS key + D" is pressed(Show Desktop),
but I don't know which message is sent.
I have captured all messages that has sent to my dialog by SPY++, but none of the is acceptable.
Since my dialog has no border (it has no caption) and subsequently it has no minimized property in the dialog properties, I don't know how to handle the message.
By the way, I handled "OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)" message, but the message is sent for Activating and Inactivating.
But I want to handle a message which is sent when "Windows key+ D" is pressed merely.
Thanks.
|
|
|
|
|
you don't have to capture the message.
you just have to design your application so that it is minimized to the System tray.
same would happen then if you manually minimize it (with the upper right buttons), if you press the task bar button to reduce it, if you press Win+D (show Desktop), or Win+M (minimize all)...
|
|
|
|
|
Would you mind explaining me how can I design my application to send the dialo to the System tray automatically by minimizing the Windows (Win+D Or Win+M)?
|
|
|
|
|
Stop being rude. He is not being paid to help you out.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
You considered Mohammad's question to be rude? As I see it, he was just asking for clarification.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I thought he could have asked "Would you please", instead of "Would you mind".
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Yes, he "could" have, but why, when they are both valid forms of asking the same question? Consider:
Would you please help me find the store?
Would you mind helping me find the store?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I really don't know, but I felt that "please" would have been a more polite form. My apologies, if I am wrong.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Please Lord for me please.
|
|
|
|
|
Would you mind explaining it to me?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
you pwned me with the Win+D, because the OP specified it explicitely, but I still think that he is trying to do something badly. Windows is what it is, what trying to change its behavior...?!
|
|
|
|
|
toxcct wrote: you pwned me with the Win+D, because the OP specified it explicitely,
I think the underlined part is what you missed.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Is your application capable of getting into the system tray? Have you completed that part?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Yes, my application is capable to go to the system tray.
|
|
|
|
|
is it when you minimize it, or you have to specify it with a button or a menu item like "Go to the Tray Now !" ?
if the later, you have to override the minimize message (WM_MINIMIZE) and make it go to the tray in this event handler...
|
|
|
|
|
Register a hot key with RegisterHotKey for WinKey+D. See here[^] for an example. In your message handler for the hot key message, put the logic to send your window to the system tray.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
no dude, please ! don't send him in this direction !
he doesn't need at all to know that it's Win+D which made his application minimized to the tray.
What he wants is overriding WM_MINIMIZE to put his apps to the tray.
|
|
|
|
|
toxcct wrote: WM_MINIMIZE
Is there a message like that in MFC?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
...formerly known as brahmma
Codeproject.com: Visual C++ MVP
|
|
|
|
|
my bad, WM_SIZE or WM_ACTIVATE.
You can also get notified of the minimize command before it is carried out using WM_SYSCOMMAND.
also, the IsIconic() function is there to know if an application is minimized...
|
|
|
|