Browse DevX
Sign up for e-mail newsletters from DevX

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



Building the Right Environment to Support AI, Machine Learning and Deep Learning

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

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("'");
    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?

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.



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