How to call a Win32 dll function with BSTR parameter from VB

How do I call a function residing in a Win32 dll(developed using VC++) which takes a BSTR as a parameter ?
The function prototype in VC++ is as follows
***************************************
extern "C"
PRESENTATION_API void __stdcall Sample(BSTR sName);
***************************************

I tried calling the function in VB using the following declaration.
***************************************
Private Declare Sub Sample Lib "presentation" Alias "_Sample@4" (ByVal sName As String)
***************************************

I didnot succeed in my attempt. However, if I change my function parameter in VC++ to a variant, I could successfully call the same from VB with a small modification to the function declaration.
vasanthaAsked:
Who is Participating?
 
Erick37Connect With a Mentor Commented:
"HOWTO: Pass a String Between Visual Basic and Your C DLL"

http://support.microsoft.com/support/kb/articles/Q187/9/12.ASP
0
 
AzraSoundCommented:
http://www.vb-helper.com/Howto/vcdll.zip
http://www.rdrop.com/~cary/program/mixed_language.html


two things you might want to check out regarding creating vc++ dlls for use with vb

0
 
CraigLazarCommented:
Hi
in c use the bstring function like this

#include "comutil.h"
    BSTR mess;
 mess = _com_util::ConvertStringToBSTR("Step - This is also funky!");
        IDoug->DougThis (&mess);
        CoTaskMemFree (mess);
       
        url = _com_util::ConvertStringToBSTR ("http://www.microsoft.com");
        IDoug->gothere (&url);
        CoTaskMemFree(url);

this works when passing a c string to my vb activex dll or exe

hope it helps

craig
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

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.

 
vasanthaAuthor Commented:
As mentioned in the article 12.ASP(thanks to Eric37), a BSTR string will be automatically be converted to plain ASCII while passing the same from VB to a C dll. Does it mean that I will not be able to accept a string from VB as a BSTR in a C dll ?
0
 
CraigLazarCommented:
as far as i know u can go from vb to c using the opposite function
ConvertBstrtoString

:)

Craig
0
 
vasanthaAuthor Commented:
From the article that Erick has suggested, I understand that a BSTR string from VB is automatically converted to ASCII string when sent to a C dll. So, I have modified my VC dll function to accept a LPSTR.

Thanks Erick for the suggestion.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.