Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Beginner
Aug 3, 1999

C++ DLL to VB : Problem When Trying to Send a BSTR

Question:
From the code below, I get output: 'asdf' which is correct. But when the VB program is closed, it says VB6 has preformed an illegal operaton and will be shut down.

Here's my C++ code:

BSTR __declspec(dllexport) __stdcall Quotes (BSTR a)
{
	typedef char * st;
	st temp = strdup("'");
	strcat(temp,st(a));
	strcat(temp,"'");
    return (BSTR(temp));
}

My VB code:

Private Declare Function Quotes Lib "stringlib.dll" (ByVal test As String) As String

Private Sub Form_Click()
    Dim i As String
    i = Quotes("asdf")
    Debug.Print "Stuff: "; i
End Sub

Can you tell me what's going on?

Answer:
I see a couple of problems with this code. First, when you call a DLL routine from VB using the Declare statement, VB automatically converts the string from Unicode to ANSI. So the argument to your Quotes function should be an LPSTR. (If you use a type library, you can tell VB to pass a BSTR.) Next, your code uses strdup to allocate a string of 2 bytes (one for the " ' " and one for the terminator). You then proceed to copy the original string and a final " ' " to the end of this string. This is almost surely what is causing the error as you are writing past memory that your program owns.

DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date