|
i thnik matlab has GUI toolbox exactly like VB(i mena textbook,dialog ,etc.) . So why do want it to convert it to VB forms?? tell me if I cudn't understand U??
cheers
vibhash
|
|
|
|
|
Yes i know but started to build my project in Vb environment and now since some numerical techniques i have to use and cant do this by Vb by using matlab i want to solve those numerical problems and eport them from matlab to my Vb project that i have already build in Vb..So since the time is short i cant do all again by matlab GUI.. ....
My second question is that is there a way to export matlab GUI to Vb as a Vb new form maybe it is possible..
or does it work if i copy and paste my symbollic formualtions ( such as numerical integrations..differantiations etc..) solved by matlab in to VB code page.. may be this is the alternative way but does it work?
|
|
|
|
|
I will give u a wild advice which you may not like but worked for me many of the time.. just for the sake of completing your project..
1)You can create a output file based on MATLAB numerical datas and try to read that file In VB..only one basic problem.. if ur num datas are too dynamic.. ur refresh rate thru VB code should be fast enough to give u the desired behaviour.. may be u have the compromise in performnace but still works..
2) i am not sure but i do think there will be OCX controls provided by MATLAB (u can serach in VB toolbars) to import its GUI in ur VB forms.. in that case i think ur life will be pretty easy but still u have to juggle ur head to understand the new APIs.. if u can take this much pain.. the i think it will perfectly okay..it will help you in future projects even..
3) copying ur formualtions is not a gud ideas as VB will trim ur calcualtions datas to a large extent and u will get roudoff erro.s so better leave these calculation part to MATLAB (they have much sophisticated algorithms to support this).. but if u think that u can work without much accuracy.. u can apply this technique too..but again not advisable..
cheers
vibhash
Bangalore,INDIA
|
|
|
|
|
while i was trying the 3rd one you mentioned i have come accross a new problem as i mentioned below
dSdFF=(sqrt((2+4*r)*(1+r)/(2*r+1))+tan(FF))*(dKhotFF)+(2*RR*sin(FF)*tan(FF)+h*(sec(FF))^2+2*RR*cos(FF)+2*RR*sqrt((2+4*r)*(1+r)/(2*r+1))*sin(FF))*Khot/h
dSdFF =
-2*(((2+4*r)*(1+r)/(1+2*r))^(1/2)+tan(FF))*((4/3+2/3*r)/(2+4*r))^(1/2)*A1*(B1+((4/3+2/3*r)*(1+r)/(1+2*r))^(1/2)*log(H1/(H2+2*RR*(1-cos(FF)))))^n*n*((4/3+2/3*r)*(1+r)/(1+2*r))^(1/2)/(H2+2*RR*(1-cos(FF)))*RR*sin(FF)/(B1+((4/3+2/3*r)*(1+r)/(1+2*r))^(1/2)*log(H1/(H2+2*RR*(1-cos(FF)))))+(2*RR*sin(FF)*tan(FF)+(H2+2*RR*(1-cos(FF)))*sec(FF)^2+2*RR*cos(FF)+2*RR*((2+4*r)*(1+r)/(1+2*r))^(1/2)*sin(FF))*((4/3+2/3*r)/(2+4*r))^(1/2)*(A1*(B1+((4/3+2/3*r)*(1+r)/(1+2*r))^(1/2)*log(H1/(H2+2*RR*(1-cos(FF)))))^n-A2*e^m)/(H2+2*RR*(1-cos(FF)))
>> intdSdFF=int(dSdFF,FF)
Warning: Explicit integral could not be found.
> In C:\MATLAB6p5\toolbox\symbolic\@sym\int.m at line 58
i have a differantial equ'n such as dS/dFF and i want to integrate w.r.t FF to get S function but it does nt work gave error as above.. do you have an idea ..please help
|
|
|
|
|
ya thta's true.. it is not always possible for the matlab kernel to find the explicit integral..
there can be many posiblities..
1) try subsituting the values of the constants(like r,h...) used in your function.
2) or you have to provide range of the integration like int(f,start,end)
3) if still it doens't work , may be you have to go for numerical integration.. try quad.. or simply double(int(f,start,end))..(internally double does the numerical integration for you..)
it's possibly that if you provide the same function in MATCAD/mathematica , you will get a solution as it internally does the numeraical integration(ofcourse range has to be provided..)
cheers
vibhash
B'lore,INDIA
|
|
|
|
|
hi
firstly i really thank you for your valuable suggestions and comment but i still could nt solved that equation i wonder if you help me simultaneously from net...if you ok for you we can get contact each other ..
k=g(x)
i have (dS/dx)=f(S,x,dk/dx) type equation and if you have experinced to solve such problemms please help me
my aim is to find P=int(S,x)....
|
|
|
|
|
I have understood the problem.. i think you cudn't understand my argument..
I will try explaining again..
Suppose f(x) = (1/2 + cos(x) )
int(f,x) = x/2 +sin(x) .. it has a indefinite integral solution..
but say if f(x) = sqrt(1/3 + log(sin(x^(1/3)))
int(f,x) will show error .. as it is not possible for the integral to solve indefinitely.
In this case , we have to go to numerical integration..
so, we have to try double(int(f,x,lb,ub))
double --> for numerical integration
lb,ub - >lower and upper bounds..
in this case you will get a definite solution..
I think your function is also too complex which can't be solved definitely.. so you have to numerical integration.. there is no other choice.. can you tell me the upper and lower bounds in which you want to integrate the functions??? may be i can help you.. i could i have given you the results but currently i don't have MATLAB installed in my PC...
i think i am clear now..
cheers
vibhash
B'lore, INDIA
|
|
|
|
|
hi ;
yes i understood you..and you are right there is no other choice and i have to make numerical integraiton.Well since this problem will be yielded outputs from Vb environment according to the user inputs i have to make those numerical calcualtions in Vb environment ..i wsih i could show those function but how maybe i will take the picutre of them from my web cam and show you maybe i can explain it better...you know i know i can apply some numerical techniques to some simple functions but i had never experinced with such hard function so it challenges me any way ..well please correct me where i am wrong, if i use Runge Kutta, one of numerical integration technique,to solve dS/dx which has initial S at x=0 (lower bound) (S initial is known) by selecting step size h =0.1,to the final value of x=10 (upper bound) i get 100 S values....now i want to use this values in another integration (P=int(S,x)) at this time to obtain another P value which depends on those S values
so at the end i have S1 S2 .....S100 (100 S values) and x1 x2 ....(incrementing with h =0.1) as 0 0.1 0.2 0.3......10 (100 x values)
how can make nurmical integration with above values to obtain final P value...
i hope you understand me .i can really understand you clearly...i hope i will solve this problem with your valuable help..
and if you want i can send you a picture of functions taken by web cam this can help you to understand my question well ...
last quesiton does it seems that i cane make those calculations with Vb ?
thanks in advance..
|
|
|
|
|
i think i understand u little.. but still i would like to have some snapshots and clear picture from beginning.. that would help me to understand better..
|
|
|
|
|
hi
i wanted to add this
as i looked from the numerical integration book while
x=[x1 x2 x3 ..etc]
and
S=[S1 S2 S3 .....]
matlab can take integration with trapz(x,S) does it give accurate results
|
|
|
|
|
trapz gives the numerical result using trapezoidal method.. in your case. if s are functions of x.. it will be give you a range of values.. is this what you are looking for??
exmaple
x = [0:pi/100:pi] what is essentially ( 0,pi/100,2pi/100,.....pi)
y = sin(x)
trapz(x,y) integrate y wrt x ang gives u a single value..but if y itself is aset of numbers.. i think output itself will be a set og umbers.. i think u can check this with a small example..
Are you trying to evaluate some double integration kind of thing???
|
|
|
|
|
yes excatly what you mentioned is what i wanto explain ..but this step will be the final step to obtain single value after integration y (in my case S) w.r.t x (in my case FF) and that value will be the P value which i want to get.
But before following such approach i must get S values from that long, complex dS/dFF derivation..i have sent you equn i hope you will better understand..
angle phi (FF) in snapshot is defined as 0
|
|
|
|
|
I am trying to enable and disable a network adapter (not release and renew). It seems the only way to do this is through the shell object. I have been grinding on this problem for over a week. Currently I am stuck trying to apply a 'verb' to an contextmenu object.
Here are two relevent code snippets:
bool FoundOne = false;<br />
bool ContextMenuLoop = true;<br />
CString MenuItemName;<br />
CMenu MyMenu;<br />
MyMenu.CreatePopupMenu();<br />
MENUITEMINFO MenuItemInfo;<br />
ZeroMemory(&MenuItemInfo, sizeof(MenuItemInfo));<br />
MenuItemInfo.cbSize = sizeof(MenuItemInfo);<br />
MenuItemInfo.fMask = MIIM_ID | MIIM_TYPE;<br />
<br />
char Buff[50];<br />
ZeroMemory(Buff, sizeof(Buff));<br />
MenuItemInfo.cch =49;<br />
MenuItemInfo.dwTypeData = Buff;<br />
MenuItemInfo.fType = MFT_STRING;<br />
<br />
<br />
<br />
int Offset = (int)ContextMenu->QueryContextMenu(MyMenu, 0, 1, 30000, CMF_EXPLORE);<br />
unsigned int J;<br />
<br />
for (J = 0; J < MyMenu.GetMenuItemCount(); J++)<br />
{<br />
int T;<br />
T = MyMenu.GetMenuItemID(J);<br />
if (T > 0)<br />
{<br />
MyMenu.GetMenuString(T, MenuItemName, MF_BYCOMMAND);<br />
MyMenu.GetMenuItemInfo(T, &MenuItemInfo);<br />
if (DISABLE_VERB == MenuItemName)<br />
{<br />
FoundOne = true;<br />
break;<br />
}<br />
}<br />
}
At this point I have the context menu object, and actually found the DISABLE_VERB. I also MenuItemInfo for this particular menu item. So far so good...
if (true == FoundOne)<br />
{<br />
HRESULT Hr = NULL;<br />
<br />
CMINVOKECOMMANDINFO Cmd;<br />
ZeroMemory(&Cmd, sizeof(Cmd));<br />
Cmd.cbSize = sizeof(CMINVOKECOMMANDINFO);<br />
Cmd.lpVerb = MAKEINTRESOURCE(MenuItemInfo.wID);<br />
<br />
Hr = ContextMenu->InvokeCommand(&Cmd);<br />
int L = GetLastError();<br />
<br />
<br />
Sleep(100);<br />
<br />
Cmd.lpVerb = ENABLE_VERB;<br />
}
The line in bold is the key line. Its where I set my verb. If I use the DISABLE_VERB, which I just found, it gives me an invalid parameter error (80030057). I set the verb directly, such like Cmd.lpVerb = DISABLE_VERB; when I get this error. I have no idea why since I searched for it and found it.
Next I tried using the wID (as it is done in this code snippet) and while it accepted the parameter, it did the wrong thing (It tried to bridge network connections). I thought the index might be off by +/- 1, but that didn't help.
Can anyone tell me what I am doing wrong?
|
|
|
|
|
- I have developed a simple SDI application which has the ability to draw a rectangle in the client area. (For this i am using a dialog box to get the values from the user and i am using the view pointer to draw the diagram)
- Now i am trying to write a wrapper which is a COM interface to call the draw function in the view of SDI application. But i failed to get the right view handle.
- Could any one suggest any method to get the expected behaviour?
|
|
|
|
|
I found this Question on Google Groups.
hello, <br />
I've created an ATL project and inserted sipmple COM object into it <br />
implementing connection points - at this stage firing the events works fine. <br />
After that i made "class CDialog1 : public CAxDialogImpl<CDialog1>" and <br />
included its .h file in the .cpp file of the COM object class . Than I've <br />
made (with DoModal) a dialog in the COM object base class and it works fine <br />
but how can i throw the events implemented in the base COM object from the <br />
dialog or how can i made conection from the dialog to the base class. <br />
The problems are <br />
1)i can't include the .h file of the base COM object class into the dialog <br />
.h file because they get nested (i've already included the dialog .h file in <br />
the base COM object .cpp - this is needed to create the dialog there) <br />
2)i can't use, lets say CHAIN_MSG_MAP(CMyBase) in the dialog .h file <br />
because CMyBase is not defined at this stage! <br />
<br />
<br />
please help, <br />
miro
And this answer..
Define an interface abstract class in the dialog header and let your dialog <br />
call into it (it is initialized with a pointer to that interface class <br />
before <br />
DoModal). Implement this abstract interface class on your COM object <br />
and pass your this pointer to the dialog before issuing DoModal. Voila! <br />
Your dialog fires notifications without knowing about your COM class <br />
a bit! <br />
<br />
<br />
BTW, an interface class looks like a COM interface, but doesn't need to <br />
derive from IUnknown: <br />
<br />
<br />
class IMyCppInterface <br />
{ <br />
public: <br />
virtual void MyInterfaceMethod(CAnotherClass &rMyClassArg) = 0; <br />
<br />
<br />
<br />
}; <br />
<br />
<br />
As you see, you are not limited with COM types altogether...
--
Can anyone explain to me what the answer means...???
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
If I was to answer the original question I would have asked for more information since I cannot understand why the header file for the COM object cannot be included in the header file of the dialog. The reason given is that "they get nested", which is a common problem solved with preprocessor directives, e.g.
#ifndef MYFILE_INCLUDED<br />
#define MYFILE_INCLUDED<br />
<br />
<br />
#endif
However, the answer suggests that another header file is created, declaring an abstract base class from which the COM object should be derived. The dialog should have a member variable that is a pointer to the newly declared abstract class which sould be set by a call prior to calling DoModal() from the COM object.
The abstract class has a virtual function, implemented by the COM object, that the dialog object calls when it wants to fire the COM event. This is how the dialog can call the COM object without including its header file.
N.B. this is not how I would have solved the problem, but this is what the answer suggests and that was what you asked for...
Hope this helps
--
Roger
It's suppose to be hard, otherwise anybody could do it!
|
|
|
|
|
Thanks a lot for your explanation.
You have said in the end that this is not how you would solve the problem. So how in your would you exactly solve the problem? Would you please explain it!
Thanks...
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
As I stated in my previous post I would have the person who asked the original question to elaborate on the subject since as I understood the problem there is a more intuitive solution with preprocessor directives.
If the preprocessor directive solution is, for some strange reason, not applicable I would have used messages since the COM object already is, or could be developed to be, multithreaded.
In the original question a second problem is described briefly about how he/she was unable to use a message based solution. I don't know whether this is due to incompetence, poor design or something else since there's simply not enough information in the post.
Perhaps a solution like this[^] would do the trick.
LazyKancha wrote: So how in your would you exactly solve the problem?
As you might have guessed by now I cannot suggest a solution to the problem since I don't have enough information and since you are not the original poster I cannot get more information. What I meant was the suggested solution to be somewhat far-fetched since there is an obvious solution that is simpler and if that one isn't applicable there could be more to it than creating a abstract base class.
It was also a hint to you that there could be more to it than meets the eye and if you're having a problem you should post a question regarding your own problem. There is a possibility that the person that replied to the original post has misunderstood the question. There's also a possibility that you have misunderstood the question and hence cannot understand the answer. Even I may have misunderstood the original question and that's why I think it's important to be able to ask questions back to the person that sent the originial question.
However, I suspect that I would have tried to make the COM object class declaration visible to the dialog class since it would the simplest thing to do. But this requires some trade-offs such as the call has to be made from the same thread that created the COM server, i.e. it cannot be called from a worker thread inside the dialog class.
Hope this helps
--
Roger
It's suppose to be hard, otherwise anybody could do it!
|
|
|
|
|
Ok.. Let me explain my situation.
I have a COM component which exposes some methods and also implements Connection points. Now, this component contains a dialog derived from the CAxDialogImpl. There are buttons on this dialog. This dialog is displayed through a method in the COM component. I want to relay the button click event on the dialog to the client using the component.
Lets say that the Component exposes a Method .. umm DisplayMyMessage(). This method.. has the Cdlg.DoModal() code. When the user clicks on a buton on the Dialog, the client must be notified of the click event.
Can you help me out.......???
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
At first, I suggest you try to add a function to your dialog class that takes a pointer to the COM server as argument and let the dialog class save it as a member variable.
Use that member variable to call the Fire_ButtonClicked event.
This would be the simplest solution I ment earlier.
This may not work as you desire since you'll be stuck inside the COM server's DisplayMyMessage() routine, or rather the local message loop of DoModal(), and the COM library may complain about this when you try to fire the event.
If this is the case I suggest you start a worker thread from DisplayMyMessage() and pop up the dialog from that thread instead. To be able to fire events from a secondary thread inside a COM server you can use Micheal Lindig's solution[^] which I've used several times with great success. His solution lets you forget about what thread you're firing events from and will take care of the marshalling for you "automatically".
The down-side is a slight performance draw-back since the interface has to be unmarshalled and queried for every call, but it's usually managable and will work (if implemented correctly ).
Hope this helps
--
Roger
It's suppose to be hard, otherwise anybody could do it!
|
|
|
|
|
Thanks a lot. Will try the Michael solution.
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
Hello,
How to "catch" doble click on ANY lnk file, but before any windows message (for example, no CD in CD drive,...)?
I mean, how to do it if lnk file point to CD drive and no disk in drive?
And:
How to take the same if lnk file is internet shorcut?
Thank you.
|
|
|
|
|
|
When I used ATL to build a COM, It's named ATLObj.dll.
With a event of OnLButtonDblClk.Code like this:
BEGIN_MSG_MAP(CATLDiceObj)
CHAIN_MSG_MAP(CComControl<catldiceobj>)
DEFAULT_REFLECTION_HANDLER()
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk)
END_MSG_MAP()
But when I added this Control into a ATL Dialog ,The "OnLButtonDblClk" event function is not responded and added into MFC Dialog is working well.
Can you tell me the reason why it can not respond the OnLButtonDblClk event?
Thanks in advance!
|
|
|
|
|
Make it look like this:
BEGIN_MSG_MAP(CATLDiceObj)
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk)
DEFAULT_REFLECTION_HANDLER()
CHAIN_MSG_MAP(CComControl)
END_MSG_MAP()
Steve
|
|
|
|