From: dave_wurtz on
On Jun 18, 2:22 pm, Tom Shelton <tom_shel...(a)comcast.invalid> wrote:
> DaveWurtzsubmitted this idea :
>
>
>
>
>
> > On Jun 18, 8:47 am, Tom Shelton <tom_shel...(a)comcast.invalid> wrote:
> >> DaveWurtzformulated the question :
>
> >>> On Jun 7, 5:16 pm, "Herfried K. Wagner [MVP]" <hirf-spam-me-
> >>> h...(a)gmx.at> wrote:
> >>>> Am 08.06.2010 00:05, schriebDaveWurtz:
> >>>>> In my VB.NET application, I'm trying to call a function from a 32-bit,
> >>>>> non-.NET dll file and I'm having problems.  I believe I have the
> >>>>> correct signature for the dll with:
> >>>>> <System.Runtime.InteropServices.DllImportAttribute("asdHTMLCompare.dll")>
> >>>>>  >[...] When I run this, I get the error:
> >>>>> An exception of type 'System.EntryPointNotFoundException' occurred in
> >>>>> ProductVision.Windows.Forms.dll but was not handled in user code.
> >>>>> Additional information: Unable to find an entry point named
> >>>>> 'BuildCompositeFile' in DLL 'asdHTMLCompare.dll'.
> >>>> Maybe the function has a different name.  You may want to use Dependency
> >>>> Walker (<URL:http://www.dependencywalker.com/>) to examine the function
> >>>> the DLL exports.
>
> >>>> --
> >>>>   M S   Herfried K. Wagner
> >>>> M V P  <URL:http://dotnet.mvps.org/>
> >>>>   V B   <URL:http://dotnet.mvps.org/dotnet/faqs/>
> >>> Thanks for the reply.
>
> >>> As suggested, I downloaded the Dependency Walker program and opened
> >>> the DLL.  In looking at the function I want to call and selecting
> >>> "Undecorate C++ Functions", this is what it shows:
> >>> int BuildCompositeFile(char *,char *,char *,char *,char *,char *,int)
> >>> Do I have the correct signature defined?
> >>> Thanks.
> >>>Dave
>
> >> If the dll is exposing a decorated name, then you must alias the vb
> >> declare to the decorated name....
>
> >> --
> >> Tom Shelton- Hide quoted text -
>
> >> - Show quoted text -
>
> > I don't understand what you are saying.  Can you expand on this and/or
> > show an example?
>
> By default a dll compiled in C++ will mangle the names - this is to
> allow overriding of functions.   So, your function BuildCompositeFile
> maybe exported as something like ?BuildCompositFile@@YXZ.  That isn't
> probably the actual name - I the way names are mangaled or decorated
> has  alot to do with the compiler, and the types being passed.  But the
> point is, the entery point in the dll is probably NOT
> BuildCompositeFile.
>
> You can use dumpbin /exports on your dll to see the actual name table.  
> So, say the name is as above, then you would need to add an alias to
> your VB declare:
>
> Declare Ansi Function BuildCompositFile Lib "asdHtmlCompare.dll" Alias
> "?BuildCompositFile@@YXZ" (.....)
>
> HTH
>
> --
> Tom Shelton- Hide quoted text -
>
> - Show quoted text -

Thank you. This worked perfect!
Dave
From: dave_wurtz on
On Jun 18, 2:26 pm, "Herfried K. Wagner [MVP]" <hirf-spam-me-
h...(a)gmx.at> wrote:
> Am 18.06.2010 20:03, schriebDaveWurtz:
>
> >> If the dll is exposing a decorated name, then you must alias the vb
> >> declare to the decorated name....
>
> > I don't understand what you are saying.  Can you expand on this and/or
> > show an example?
>
> Use the name you see prior to choosing to undecorate the function.
>
> --
>   M S   Herfried K. Wagner
> M V P  <URL:http://dotnet.mvps.org/>
>   V B   <URL:http://dotnet.mvps.org/dotnet/faqs/>

Thank you. This worked perfect!
Dave