Solved

How do I Call a function form a dll file

Posted on 2007-12-02
9
210 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 92

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
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

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 250 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 250 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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

820 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