devxlogo

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

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 StringPrivate Sub Form_Click()    Dim i As String    i = Quotes("asdf")    Debug.Print "Stuff: "; iEnd 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.

devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist