?
Solved

How do I Call a function form a dll file

Posted on 2007-12-02
9
Medium Priority
?
217 Views
Last Modified: 2008-02-01
I made a simple dll file from http://www.icynorth.com/development/createdlltutorial.html but i get the error Bad DLL calling convention when I try to use it. Can someone show me the correct way to use this dll from VB.

Thanks for your help
rich
0
Comment
Question by:rcherne1
  • 4
  • 2
  • 2
  • +1
9 Comments
 
LVL 93

Expert Comment

by:Patrick Matthews
ID: 20391791
Hello rich,

How are you trying to call it now?

Regards,

Patrick
0
 

Author Comment

by:rcherne1
ID: 20391804

Private Declare Function RetrieveTempFilename Lib "c:\work\MakeTempFilenameDLL.dll" (szDirectory As String, szPrefix As String) As String

Private Sub Command1_Click()
Dim my_szDirectory As String
Dim my_szPrefix As String
my_szDirectory = "c:\work\"
my_szPrefix = "tst"
MsgBox RetrieveTempFilename(my_szDirectory, my_szPrefix)
End Sub
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 20391982
can you show how exactly you defined the function in your dll code?
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:rcherne1
ID: 20391997

char szReturn[MAX_PATH];
 
__declspec(dllexport) LPCTSTR RetrieveTempFilename(LPCTSTR szDirectory, LPCTSTR szPrefix)
{
     char szBuffer[MAX_PATH];
     if(GetTempFileName(szDirectory,szPrefix,0,szBuffer) == 0)
     {
          // It failed - return the string "ERROR"
          lstrcpy(szReturn,"ERROR");
     } else {
          // Success!
          lstrcpy(szReturn,szBuffer);
     }
     return szReturn;
}

Open in new window

0
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 1000 total points
ID: 20392030
please try to change the declaration:


Private Declare Function RetrieveTempFilename Lib "c:\work\MakeTempFilenameDLL.dll" (byval szDirectory As String, byval szPrefix As String) As String

0
 
LVL 22

Assisted Solution

by:danaseaman
danaseaman earned 1000 total points
ID: 20392042
VB6 can only call __stdcall functions, not __cdecl functions so you will need to change this to __stdcall.

Error is "Bad DLL calling convention"

   __declspec(dllexport) LPCTSTR RetrieveTempFilename(LPCTSTR szDirectory, LPCTSTR szPrefix)

Try changing to this and recompile the DLL:
   __stdcall(dllexport) LPCTSTR RetrieveTempFilename(LPCTSTR szDirectory, LPCTSTR szPrefix)

0
 

Author Comment

by:rcherne1
ID: 20392282
Hum? That wont compile but I changed it to
"LPCTSTR __stdcall  RetrieveTempFilename(LPCTSTR szDirectory,LPCTSTR szPrefix)"
Now I dont get an error but i think its returning a pointer to the string not a string.

Sound like I should posted this in the vc++ area to


0
 
LVL 22

Expert Comment

by:danaseaman
ID: 20392307
I probably have the wrong syntax (I don't use C++):
http://www.mingw.org/MinGWiki/index.php/VB-MinGW-DLL
http://www.imc.org/imc-vcard/mail-archive/msg00353.html
http://www.eee.bham.ac.uk/collinst/VisualBasic-VisualC-DLL.html

Perhaps it should be:
__declspec(dllexport) __stdcall LPCTSTR RetrieveTempFilename(LPCTSTR szDirectory, LPCTSTR szPrefix)

0
 

Author Comment

by:rcherne1
ID: 20392968
angelIII and danaseaman you both had part of my answer.
I had to pass my string byval and use __stdcall
I also found that it returns a pointer.

Thanks for your help.
Rich
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses

850 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question