|
You're right. I finally got it.
|
|
|
|
|
Hello David,
modified 28-Nov-12 4:21am.
|
|
|
|
|
If you had posted this to the original thread, we would all have a better understanding of the original problem. As it is your post is meaningless except maybe to David assuming he can remember what your original problem was and his suggested solution.
As David is a prolific poster, chances are he would remember the full details.
Steve Jowett
-------------------------
Real programmers don't comment their code. If it was hard to write, it should be hard to read.
|
|
|
|
|
dear all
i have read something in internet how to call c++ .dll, and tried to declare functions in vb 6, but however after i compiled, the error was there:" can't find DLL entry point in xxxx.dll". so how to invoke the c++ member function in one .dll, someone can give me help to realize step by step. thanks a lot in advance.
note: probably one library has several classes, so how can i know which library i can use or how to use it?
rgds
|
|
|
|
|
There are different types of .DLL files. If it's a COM-based .DLL, you can add a reference to it, then instantiate the classes in it using Dim:
Dim x As New SomeClassInLibrary
If it's a library .DLL, then you have to use the Declare statement to setup the call. But, in order to use this, you MUST have the documentation on the functions you want to use so you can properly write the parameter information into the Declare. Without it, you're guessing and are going to get it wrong.
|
|
|
|
|
thanks for your reply, my dll has 2 files: icon_c(object file library) and icon.dll. i have documentation already and detail of all functions' parameters. so how i can call the .dll functions in vb step by step. i also know i need to export the function name of .DLL. then i can call in vb, but i dun know how to export in .dll. i need your further help. thanks a lot.
Note: someone already created the .dll, i just want to use it.
rdgs
modified on Thursday, May 14, 2009 2:44 AM
|
|
|
|
|
|
thanks, i have read it already. the difference is i got .dll already. in part 2, that is user created own .dll, they can export by themselves..here, i can't export or i dun know how to export functions name in .DLL. thanks. please help me, how to export functions name of .DLL.
|
|
|
|
|
zhiyuan16 wrote: that is user created own .dll, they can export by themselves..here, i can't export or i dun know how to export functions name in .DLL
You don't have to export anything - it's already being done by the .DLL.
The VB code in that example shows you how to Declare functions supplied by an external library. Granted, there are no parameters in those two functions exposed by the example .DLL, but you add those just like you add parameters to normal VB functions you define.
|
|
|
|
|
thanks for your reply, i tried to do that already. the error occurred: "file not found: dll or couldn't find entry point of member function". so what happened? need your further help. thanks
|
|
|
|
|
The name of the function you use in the Declare statement must match EXACTLY what the exported function name in the .DLL is. Or, you can use the Alias keyword in the Declare statement to provide the exported name and name the function anything you want in your code.
Also, the .DLL has to be either in the same folder as your .EXE that is calling it, or in a folder listed in the PATH environment variable.
|
|
|
|
|
thanks alot friend. sorry to ask you one more question: i just would like to confirm we can call all c++ .dll in vb? that means the member functions of c++ .dll were already exported for any c++ .DLL? thanks
Rgds
|
|
|
|
|
|
thanks. i have one more question: sorry. if one DLL has one or several classes and their own member functions. how i can call their own corresponding member functions. could you provide me with any detail. thanks a lot in advance.
rgds
|
|
|
|
|
It would have to be exposed at a COM-based .DLL. You can't get at them otherwise. PInvoke won't do you any good since it only works with function library .DLL's.
|
|
|
|
|
Why are you still using VB6 ?
Christian Graus
Driven to the arms of OSX by Vista.
"I am new to programming world. I have been learning c# for about past four weeks. I am quite acquainted with the fundamentals of c#. Now I have to work on a project which converts given flat files to XML using the XML serialization method" - SK64 ( but the forums have stuff like this posted every day )
|
|
|
|
|
I have an interop assembly being used in VB6 called ConvertOptions that is being used in various .dlls. I have an odd problem occurring. Below is an example of what is occurring.
Sub GetDescriptions
Dim oOpt As New ConvertOptions.ConvertOptions
'Misc VB6 code here...
GetLabelData
'oOpt internal variables are disposed here?
'Misc VB6 code here.
oOpt.dispose
set oOpt = nothing
End Sub
Sub GetLabelData
Dim oOptions As New ConvertOptions.ConvertOptions
'Misc code.
oOptions.dispose
set oOptions = nothing
End Sub
Method GetDescriptions has a local variable called oOpt (of ConvertOptions.ConvertOptions) which then calls GetLabelData. GetLabelData has it's own local ConvertOptions.ConvertOptions variable. At the end of the GetLabelData sub I dispose of the oOptions object.
When execution is returned to the GetDescriptions, the oOpt variable has it's internal objects = nothing.
Each sub has it's own local variable. There is not a module or global variable w/ the same name. The local vars are not passed by reference. The .Net project is not set for single instance. The only place that the variables in question the .Net assembly are destroyed is in the .dispose method.
Am I doing something obviously wrong? If an interop object is diposed of in one method, should it dispose all other interop objects of the same type in other methods?
Any suggestions, ideas, or 'constructive criticism' are always welcome.
"There's no such thing as a stupid question, only stupid people." - Mr. Garrison
|
|
|
|
|
This shouldn't be happening. The only case I can think of where it might happen is if you're using static variables in your .NET library.
But, lucky me! I haven't used VB6 in 8 years and don't have it available to me anymore!
|
|
|
|
|
Checked the project, def. no static members. I broke out the code that is declaring and destroying the object (to avoid all code running in between), same thing. If I rem out the .dispose in the 2nd sub, the object remains alive in the sub 1.......but I don't want to start a memory leak.
Regarding VB6, we're in the process of porting everything to .Net - but we have to support the unconverted VB6 stuff in the meantime - not fun~!
Any suggestions, ideas, or 'constructive criticism' are always welcome.
"There's no such thing as a stupid question, only stupid people." - Mr. Garrison
|
|
|
|
|
Sigh!
I had a var being declare in a module that was being disposed in a class. That was hosing it up.
Thanks Dave.
Any suggestions, ideas, or 'constructive criticism' are always welcome.
"There's no such thing as a stupid question, only stupid people." - Mr. Garrison
|
|
|
|
|
I know how to make a child form appear in form, set the first form IsMdiContainer to True then, write this when calling the form
Form2.MdiParent = Me<br />
Form2.Show()
Now that is not working when there is ToolStripContainer on the form, it gives error message "{"Form that is not a top-level form cannot be displayed as a modal dialog box. Remove the form from any parent form before calling Show."}"
I add this line before the Show() Form2.TopMost = True, now it does not give any kind of error, but when I press on the button to call the second form(child) nothing happened.
I set the ToolStripContainer.Visible = False and the child windows appear but my ToolStripContainer and its content is not.
Can I show the form as child in form with the existence of ToolStripContainer.
TIA
Like car accidents, most hardware problems are due to driver error.
Samir R. Ibrahim
|
|
|
|
|
Samir Ibrahim wrote: Form2.MdiParent = Me
Form2.Show()
Now that is not working when there is ToolStripContainer on the form, it gives error message "{"Form that is not a top-level form cannot be displayed as a modal dialog box. Remove the form from any parent form before calling Show."}"
I don't know what you did because you haven't shown a complete code snippet that creates the new child form and displays it. But, MdiChildren CAN have a ToolStripContainer control on them.
|
|
|
|
|
Hi Dave
Dave Kreskowiak wrote: I don't know what you did because you haven't shown a complete code snippet that creates the new child form and displays it
My mistake I did not explain it correctly.
- I have main form (form1) and child form (form2)
- I add a ToolStripContainer to form1 then I clicked on "dock fill in form"
- I add a button on form1
- I have set this property to form1 (IsMdiContainer = True)
- In the button_click I write this code.
Form2.MdiParent = Me
Form2.Show()
- If I did not clicked on ToolStripContainer "dock fill in form" the child form is displayed behind ToolStripContainer
- ToolStripContainer exist on the parent form (form1) not child form.
Thanks in Advance.
Like car accidents, most hardware problems are due to driver error.
Samir R. Ibrahim
|
|
|
|
|
Samir Ibrahim wrote: If I did not clicked on ToolStripContainer "dock fill in form" the child form is displayed behind ToolStripContainer
Yes it does, and so does the button you dropped on Form1 too. This is because your MdiChild forms are rendered inside a control that's automatically added to an MdiParent form, called MdiClient. This control is docked to fill the MdiParent form. Normally, the only thing that will change the dimensions of this container are other docked controls on the parent form.
You really should not be dropping undocked controls directly on Form1. They should be in docked containers, like the ToolStripContainer.
|
|
|
|
|
I got the idea.
Thank you very much.
Like car accidents, most hardware problems are due to driver error.
Samir R. Ibrahim
|
|
|
|